วิธีการติดตั้งและกำหนดค่า Concourse CI บน CentOS 7

บทนำ

การรวมอย่างต่อเนื่องเป็นแนวปฏิบัติในการพัฒนาซอฟต์แวร์ DevOps ซึ่งช่วยให้นักพัฒนาสามารถรวมรหัสที่แก้ไขแล้วลงในที่เก็บที่ใช้ร่วมกันหลายครั้งต่อวัน หลังจากการผสานแต่ละครั้งจะมีการสร้างและทดสอบอัตโนมัติเพื่อตรวจหาปัญหาในรหัส ช่วยให้นักพัฒนาสามารถค้นหาและแก้ไขข้อผิดพลาดได้อย่างรวดเร็วเพื่อปรับปรุงคุณภาพซอฟต์แวร์และจัดส่งซอฟต์แวร์อย่างต่อเนื่อง การสลับไปมาจาก Concourse นั้นง่ายมากเพราะมันเก็บการกำหนดค่าทั้งหมดไว้ในไฟล์ที่สามารถตรวจสอบได้ในการควบคุมเวอร์ชัน นอกจากนี้ยังมีส่วนต่อประสานกับผู้ใช้บนเว็บซึ่งแสดงข้อมูลการสร้างแบบโต้ตอบ

องค์ประกอบฝูงชน
  • ATCเป็นองค์ประกอบหลักของฝูงชน มีหน้าที่เรียกใช้ Web UI และ API นอกจากนี้ยังดูแลการตั้งเวลาไปป์ไลน์ทั้งหมด
  • TSAเป็นเซิร์ฟเวอร์ SSH ที่สร้างขึ้นเอง มีหน้าที่รับผิดชอบในการลงทะเบียนผู้ปฏิบัติงานกับ ATC อย่างปลอดภัย
  • คนงานจะให้บริการที่แตกต่างกันสองประเภท:
    1. การ์เด้นเป็นรันไทม์ภาชนะและอินเตอร์เฟซสำหรับการกำกับดูแลภาชนะบรรจุจากระยะไกลกับคนงาน
    2. Baggageclaimเป็นเซิร์ฟเวอร์การจัดการแคชและสิ่งประดิษฐ์
  • Flyเป็นอินเตอร์เฟสบรรทัดคำสั่งที่ใช้ในการโต้ตอบกับ ATC เพื่อกำหนดค่า Concourse Pipelines

ข้อกำหนดเบื้องต้น

  • อินสแตนซ์ของเซิร์ฟเวอร์ Vultr CentOS 7
  • sudo ผู้ใช้

ตรวจสอบให้แน่ใจว่าได้แทนที่ที่อยู่ทั้งหมด192.0.2.1และci.example.comด้วยที่อยู่ IP สาธารณะ Vultr ที่แท้จริงของคุณและชื่อโดเมนจริง

ปรับปรุงระบบฐานของคุณใช้คู่มือวิธีการปรับปรุง CentOS 7 เมื่อระบบของคุณอัปเดตแล้วให้ดำเนินการติดตั้ง PostgreSQL

ติดตั้งและกำหนดค่าฐานข้อมูล PostgreSQL

PostgreSQL เป็นระบบฐานข้อมูลเชิงวัตถุ Concourse จัดเก็บข้อมูลไปป์ไลน์ในฐานข้อมูล PostgreSQL เพิ่มที่เก็บ PostgreSQL

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

ติดตั้งเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL

sudo yum -y install postgresql96-server postgresql96-contrib

เริ่มต้นฐานข้อมูล

sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

initdbสร้างคลัสเตอร์ฐานข้อมูล PostgreSQL ใหม่ซึ่งเป็นชุดของฐานข้อมูลที่จัดการโดยเซิร์ฟเวอร์เดียว แก้ไขpg_hba.confไฟล์เพื่อเปิดใช้งานการตรวจสอบตาม MD5

sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf

ค้นหาบรรทัดต่อไปนี้และเปลี่ยนค่าpeerและidentในMETHODคอลัมน์เป็นtrustและmd5ตามลำดับ

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

เมื่ออัปเดตแล้วการกำหนดค่าควรมีลักษณะเช่นนี้

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

เริ่มต้นเซิร์ฟเวอร์ PostgreSQL และเปิดใช้งานให้เริ่มโดยอัตโนมัติเมื่อบูตเครื่อง

sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6

เปลี่ยนรหัสผ่านสำหรับผู้ใช้ PostgreSQL เริ่มต้น

sudo passwd postgres

เข้าสู่ระบบในฐานะผู้ใช้ PostgreSQL:

sudo su - postgres

สร้างผู้ใช้ PostgreSQL ใหม่สำหรับ Concourse CI

createuser concourse

หมายเหตุ : ผู้ใช้ PostgreSQL ดีฟอลต์สามารถใช้สำหรับการพิสูจน์ตัวตนของฐานข้อมูล แต่ขอแนะนำให้ใช้ผู้ใช้เฉพาะสำหรับการพิสูจน์ตัวตนของฐานข้อมูล Concourse ในการตั้งค่าการผลิต

PostgreSQL จัดเตรียมเชลล์เพื่อรันเคียวรีบนฐานข้อมูล สลับไปที่เชลล์ PostgreSQL โดยเรียกใช้:

psql

ตั้งรหัสผ่านสำหรับผู้ใช้ฐานข้อมูล Concourse ที่สร้างขึ้นใหม่

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

สำคัญ : แทนที่DBPasswordด้วยรหัสผ่านที่คาดเดายาก จดบันทึกรหัสผ่านตามที่จำเป็นในภายหลังในบทช่วยสอน

สร้างฐานข้อมูลใหม่สำหรับฝูงชน

CREATE DATABASE concourse OWNER concourse;

ออกจากpsqlเปลือก

\q

เปลี่ยนเป็นผู้ใช้ sudo จากผู้ใช้ postgres ปัจจุบัน

exit

ดาวน์โหลดและติดตั้ง Concourse CI

ดาวน์โหลดไฟล์ปฏิบัติการรุ่น Concourse รุ่นล่าสุดและเก็บไว้/usr/binเพื่อให้สามารถทำงานได้โดยตรง รุ่นล่าสุดของฝูงชนและบินไบนารีสามารถพบได้ในหน้าดาวน์โหลด Concourse ใหม่ออกบ่อยมาก แทนที่ลิงค์ด้านล่างด้วยลิงค์ใหม่สำหรับเวอร์ชั่นล่าสุด

sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse

/usr/binในทำนองเดียวกันดาวน์โหลดรุ่นล่าสุดของปฏิบัติการบินและเก็บไว้ใน

sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly

Fly เป็นอินเตอร์เฟสบรรทัดคำสั่งเพื่อเชื่อมต่อกับ ATC API ของ Concourse CI Fly พร้อมใช้งานสำหรับหลายแพลตฟอร์มเช่น Linux, Windows และ MacOS

มอบหมายการอนุญาตให้ดำเนินการเพื่อดาวน์โหลดconcourseและflyไบนารี

sudo chmod +x /usr/bin/concourse /usr/bin/fly

ตรวจสอบว่า Concourse and Fly ทำงานอย่างถูกต้องหรือไม่โดยตรวจสอบเวอร์ชั่นของพวกเขา

concourse -version
fly -version

สร้างและตั้งค่าคีย์ RSA

คู่คีย์ RSA จัดให้มีวิธีการเข้ารหัสการสื่อสารระหว่างส่วนประกอบของ Concourse

เพื่อให้ฝูงชนทำงานได้ต้องสร้างอย่างน้อยสามคู่ session_signing_keyสำหรับการเข้ารหัสข้อมูลเซสชั่นที่สร้าง กุญแจนี้จะถูกใช้โดย TSA เพื่อลงนามคำขอที่ทำกับ ATC เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์ TSA SSH, tsa_host_keyสร้าง สุดท้ายสร้าง a worker_keyสำหรับผู้ปฏิบัติงานแต่ละคน

สร้างไดเรกทอรีใหม่เพื่อจัดเก็บคีย์และการกำหนดค่าที่เกี่ยวข้องกับ Concourse CI

sudo mkdir /opt/concourse

สร้างคีย์ที่จำเป็น

sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key

อนุญาตคีย์สาธารณะของคนงานโดยคัดลอกเนื้อหาลงในauthorized_worker_keysไฟล์:

sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys

เริ่มฝูงชน

ฝูงชนจัดให้มีสององค์ประกอบแยกกันซึ่งจะต้องเริ่มต้นเว็บและผู้ปฏิบัติงาน เริ่มเว็บ Concourse

sudo concourse web \
  --basic-auth-username admin \
  --basic-auth-password StrongPass \
  --session-signing-key /opt/concourse/session_signing_key \
  --tsa-host-key /opt/concourse/tsa_host_key \
  --tsa-authorized-keys /opt/concourse/authorized_worker_keys \
  --postgres-user=concourse \
  --postgres-password=DBPassword \
  --postgres-database=concourse \
  --external-url http://192.0.2.1:8080

เปลี่ยนชื่อผู้ใช้และรหัสผ่านของbasic-authถ้าต้องการ ตรวจสอบให้แน่ใจว่าเส้นทางไปยังไฟล์คีย์นั้นถูกต้องและตรวจสอบให้แน่ใจว่ามีการระบุค่าที่ถูกต้องสำหรับชื่อผู้ใช้และรหัสผ่านในการกำหนดค่าฐานข้อมูล PostgreSQL

หมายเหตุ : ATC จะฟังพอร์ตเริ่มต้น8080และ TSA 2222จะฟังพอร์ต หากไม่ต้องการการรับรองความถูกต้องให้ส่ง--no-really-i-dont-want-any-authตัวเลือกหลังจากลบตัวเลือกการรับรองความถูกต้องเบื้องต้น

เมื่อเว็บเซิร์ฟเวอร์เริ่มทำงานแล้วผลลัพธ์ต่อไปนี้ควรปรากฏขึ้น

{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}

หยุดเซิร์ฟเวอร์ในตอนนี้เนื่องจากยังต้องตั้งค่าอีกสองสามอย่าง

เริ่ม Concourse CI Worker

sudo concourse worker \
  --work-dir /opt/concourse/worker \
  --tsa-host 127.0.0.1 \
  --tsa-public-key /opt/concourse/tsa_host_key.pub \
  --tsa-worker-private-key /opt/concourse/worker_key

คำสั่งดังกล่าวจะสมมติว่า TSA ที่กำลังทำงานอยู่บน localhost 2222และการฟังพอร์ตเริ่มต้น

แม้ว่าเว็บ Concourse และผู้ปฏิบัติงานสามารถเริ่มต้นได้อย่างง่ายดายโดยใช้คำสั่งด้านบนแนะนำให้ใช้ Systemd เพื่อจัดการเซิร์ฟเวอร์

กำหนดค่าสภาพแวดล้อมและบริการ Systemd

การใช้บริการ Systemd สำหรับการจัดการแอปพลิเคชันช่วยให้มั่นใจได้ว่าแอปพลิเคชันจะเริ่มต้นโดยอัตโนมัติเมื่อเกิดความล้มเหลวและในเวลาบูต เซิร์ฟเวอร์ Concourse ไม่ได้ใช้ข้อมูลจากไฟล์กำหนดค่าใด ๆ แต่สามารถเข้าถึงข้อมูลจากตัวแปรสภาพแวดล้อมได้ แทนที่จะตั้งค่าตัวแปรสภาพแวดล้อมโกลบอลสร้างไฟล์ใหม่เพื่อเก็บตัวแปรสภาพแวดล้อมจากนั้นส่งผ่านตัวแปรไปยัง Concourse CI โดยใช้บริการ Systemd

สร้างไฟล์สภาพแวดล้อมใหม่สำหรับเว็บ Concourse

sudo nano /opt/concourse/web.env

เติมไฟล์

CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys

CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse

CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080

เปลี่ยนชื่อผู้ใช้และรหัสผ่านของBASIC_AUTHถ้าต้องการ ตรวจสอบให้แน่ใจว่าเส้นทางไปยังไฟล์คีย์นั้นถูกต้องและตรวจสอบให้แน่ใจว่ามีการระบุค่าที่ถูกต้องสำหรับชื่อผู้ใช้และรหัสผ่านในการกำหนดค่าฐานข้อมูล PostgreSQL

ในทำนองเดียวกันสร้างไฟล์สภาพแวดล้อมสำหรับผู้ปฏิบัติงาน

sudo nano /opt/concourse/worker.env

เติมไฟล์

CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

เนื่องจากไฟล์สภาพแวดล้อมมีชื่อผู้ใช้และรหัสผ่านให้เปลี่ยนการอนุญาตเพื่อให้ผู้ใช้รายอื่นไม่สามารถเข้าถึงได้

sudo chmod 600 /opt/concourse/*.env

ตอนนี้สร้างผู้ใช้ใหม่สำหรับ Concourse เพื่อเรียกใช้สภาพแวดล้อมเว็บ สิ่งนี้จะช่วยให้มั่นใจได้ว่าเว็บเซิร์ฟเวอร์กำลังทำงานในสภาพแวดล้อมที่แยก

sudo adduser --system concourse

มอบสิทธิ์การเป็นเจ้าของผู้ใช้ Concourse ให้กับไดเรกทอรีของไฟล์ Concourse CI

sudo chown -R concourse:concourse /opt/concourse

สร้างไฟล์บริการ systemd ใหม่สำหรับบริการเว็บ Concourse

sudo nano /etc/systemd/system/concourse-web.service

เติมไฟล์

[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service

[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web

[Install]
WantedBy=multi-user.target

บันทึกและปิดไฟล์ สร้างไฟล์บริการใหม่สำหรับบริการผู้ร่วมงาน

sudo nano /etc/systemd/system/concourse-worker.service

เติมไฟล์

[Unit]
Description=Concourse CI worker process
After=concourse-web.service

[Service]
Type=simple
User=root
Group=root
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker

[Install]
WantedBy=multi-user.target

บริการเว็บและผู้ปฏิบัติงานสามารถเริ่มต้นได้โดยตรงโดยการเรียกใช้:

sudo systemctl start concourse-web concourse-worker

ในการทำให้ผู้ปฏิบัติงานและกระบวนการทางเว็บเริ่มต้นโดยอัตโนมัติในเวลาบูตให้เรียกใช้:

sudo systemctl enable concourse-worker concourse-web

ในการตรวจสอบสถานะของบริการให้เรียกใช้:

sudo systemctl status concourse-worker concourse-web

หากไม่ได้เริ่มบริการหรืออยู่ในFAILEDสถานะให้ลบแคชออกจาก/tmpไดเรกทอรี

sudo rm -rf /tmp/*

เริ่มบริการใหม่

sudo systemctl restart concourse-worker concourse-web

ขอให้สังเกตว่าเวลานี้บริการได้เริ่มอย่างถูกต้อง ผลลัพธ์ที่ได้จากการตรวจสอบสถานะของการบริการควรเป็นแบบจำลอง

[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
   Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3037 (concourse)
   CGroup: /system.slice/concourse-worker.service
           └─3037 /usr/bin/concourse worker

Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}
...

● concourse-web.service - Concourse CI web server
   Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3036 (concourse)
   CGroup: /system.slice/concourse-web.service
           └─3036 /usr/bin/concourse web

Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.

ปรับไฟร์วอลล์ของคุณเพื่ออนุญาตพอร์ต 8080 ซึ่ง ATS กำลังทำงานอยู่และพอร์ต 2222 ซึ่ง TSA กำลังทำงานอยู่

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

กำลังเชื่อมต่อกับเซิร์ฟเวอร์

เมื่อเซิร์ฟเวอร์เริ่มทำงานเว็บอินเตอร์เฟสของ Concourse CI สามารถเข้าถึงได้โดยไปที่http://192.0.2.1:8080เบราว์เซอร์ใด ๆ เข้าสู่ระบบโดยใช้ชื่อผู้ใช้และรหัสผ่านที่ให้ไว้ในไฟล์สภาพแวดล้อม

ในการเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ Fly ให้รัน:

fly -t my-ci login -c http://192.0.2.1:8080

คำสั่งดังกล่าวใช้สำหรับการเข้าสู่ระบบครั้งแรกไปยังเซิร์ฟเวอร์ -tถูกใช้เพื่อระบุชื่อเป้าหมาย แทนที่my-ciด้วยชื่อเป้าหมายที่ต้องการ mainคำสั่งดังกล่าวจะเข้าสู่ทีมเริ่มต้น มันจะถามชื่อผู้ใช้และรหัสผ่านที่ให้ไว้ในไฟล์สภาพแวดล้อม

ผลลัพธ์จะมีลักษณะดังนี้

[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'

username: admin
password:

target saved

การเข้าสู่ระบบเป้าหมายจะถูกบันทึกไว้หนึ่งวัน หลังจากนั้นมันจะหมดอายุ

เพื่อออกจากระบบทันที

fly -t my-ci logout

fly สามารถใช้เพื่อเข้าสู่เซิร์ฟเวอร์นอกเครือข่าย แต่เฉพาะในกรณีที่เซิร์ฟเวอร์มีที่อยู่ IP สาธารณะและสามารถเข้าถึงได้จากนอกเครือข่าย ไบนารี Windows หรือ MacOS สามารถดาวน์โหลดได้จากเว็บไซต์ดาวน์โหลดหรือจาก web UI ของเซิร์ฟเวอร์

การตั้งค่า Nginx Reverse Proxy

การเข้าสู่ระบบและข้อมูลอื่น ๆ ที่ส่งผ่านเว็บ UI ไปยังเซิร์ฟเวอร์ Concourse ไม่ปลอดภัย การเชื่อมต่อไม่ได้เข้ารหัส พร็อกซีย้อนกลับ Nginx สามารถตั้งค่าด้วย Let's Encrypt SSL ฟรี

ติดตั้งเว็บเซิร์ฟเวอร์ Nginx และ Certbot ซึ่งเป็นแอปพลิเคชันไคลเอนต์สำหรับ Let's Encrypt CA

sudo yum -y install certbot-nginx nginx

เริ่มและเปิดใช้งาน Nginx เพื่อเริ่มต้นโดยอัตโนมัติในเวลาบูต:

sudo systemctl start nginx
sudo systemctl enable nginx

ก่อนที่จะสามารถร้องขอใบรับรองใบรับรองพอร์ต 80 และ 443 หรือบริการ HTTP และ HTTPS มาตรฐานจะต้องเปิดใช้งานผ่านไฟร์วอลล์ Certbot จะตรวจสอบสิทธิ์ในโดเมนก่อนออกใบรับรอง

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

พอร์ต 8080 ไม่จำเป็นต้องได้รับอนุญาตผ่านไฟร์วอลล์อีกต่อไปเพราะ Concourse จะทำงานบนพอร์ต HTTPS มาตรฐาน ลบรายการไฟร์วอลล์เพื่ออนุญาตพอร์ต 8080

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

บันทึก

ในการรับใบรับรองจาก Let's Encrypt CA โดเมนที่จะสร้างใบรับรองนั้นจะต้องชี้ไปที่เซิร์ฟเวอร์ หากไม่มีให้ทำการเปลี่ยนแปลงที่จำเป็นกับระเบียน DNS ของโดเมนและรอให้ DNS เผยแพร่ก่อนทำการขอใบรับรองอีกครั้ง Certbot ตรวจสอบอำนาจโดเมนก่อนที่จะให้ใบรับรอง

สร้างใบรับรอง SSL

sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com

ใบรับรองที่สร้างขึ้นมีแนวโน้มที่จะถูกเก็บไว้ใน/etc/letsencrypt/live/ci.example.com/ไดเรกทอรี ใบรับรอง SSL จะถูกเก็บไว้เป็นและคีย์ส่วนตัวจะถูกเก็บไว้เป็นfullchain.pemprivkey.pem

ลองเข้ารหัสใบรับรองหมดอายุใน 90 วันดังนั้นขอแนะนำให้ต่ออายุอัตโนมัติสำหรับใบรับรองที่ตั้งค่าโดยใช้ cronjobs Cron เป็นบริการระบบที่ใช้ในการทำงานเป็นระยะ

เปิดไฟล์งาน cron

sudo crontab -e

เพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์

30 5 * * 1 /usr/bin/certbot renew --quiet

งาน cron ข้างต้นจะทำงานทุกวันจันทร์เวลา 5.30 น. หากใบรับรองหมดอายุเนื่องจากหมดอายุใบรับรองนั้นจะถูกต่ออายุใหม่โดยอัตโนมัติ

สร้างโฮสต์เสมือนใหม่

sudo nano /etc/nginx/conf.d/concourse-ssl.conf

เติมไฟล์

server {
    listen 80;
    server_name ci.example.com;
    return 301 https://$host$request_uri;
}
server {

    listen 443;
    server_name ci.example.com;

    ssl_certificate           /etc/letsencrypt/live/ci.example.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/ci.example.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log    /var/log/nginx/concourse.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8080 https://ci.example.com;
    }
  }

หมายเหตุ : แทนที่ci.example.comด้วยโดเมนจริง

แก้ไขไฟล์ Environment ที่สร้างขึ้นสำหรับ Concourse Web

sudo nano /opt/concourse/web.env

เปลี่ยนค่าของCONCOURSE_EXTERNAL_URLและเพิ่มอีกสองบรรทัดที่ท้ายไฟล์

CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080

บันทึกไฟล์และรีสตาร์ทเว็บเซิร์ฟเวอร์ Concourse, Worker และ Nginx:

sudo systemctl restart concourse-worker concourse-web nginx

ข้อมูลทั้งหมดที่ส่งไปและกลับจากเบราว์เซอร์นั้นปลอดภัยด้วยการเข้ารหัส SSL



Leave a Comment

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

การติดตั้ง Pagekit CMS บน CentOS 7

การติดตั้ง Pagekit CMS บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Pagekit เป็น CMS โอเพนซอร์สที่เขียนด้วย PHP ซอร์สโค้ดของ Pagekit นั้นโฮสต์บน GitHub คำแนะนำนี้จะแสดงให้คุณเห็นว่า

วิธีการติดตั้ง TestLink บน CentOS 7

วิธีการติดตั้ง TestLink บน CentOS 7

TestLink เป็นระบบดำเนินการจัดการทดสอบบนเว็บโอเพ่นซอร์ส ช่วยให้ทีมงานประกันคุณภาพสามารถสร้างและจัดการกรณีทดสอบได้เช่นกัน

วิธีการที่ปลอดภัย vsFTPd ด้วย SSL / TLS

วิธีการที่ปลอดภัย vsFTPd ด้วย SSL / TLS

FTP ที่ปลอดภัยมากหรือเพียงแค่ vsFTPd เป็นซอฟต์แวร์น้ำหนักเบาที่มีความสามารถในการปรับแต่ง ในบทช่วยสอนนี้เราจะรักษาความปลอดภัยของข้อความ

วิธีการติดตั้ง GCC บน CentOS 6

วิธีการติดตั้ง GCC บน CentOS 6

CentOS ติดตามการพัฒนา Red Hat Enterprise Linux (RHEL) RHEL พยายามที่จะเป็นแพลตฟอร์มเซิร์ฟเวอร์ที่มั่นคงซึ่งหมายความว่าจะไม่รีบเร่งในการรวม

ตั้งค่าบัญชีผู้ใช้ SFTP เท่านั้นบน CentOS 7

ตั้งค่าบัญชีผู้ใช้ SFTP เท่านั้นบน CentOS 7

ในบางโอกาสผู้ดูแลระบบอาจต้องสร้างบัญชีผู้ใช้และ จำกัด การเข้าถึงเพื่อจัดการไฟล์ของตัวเองผ่าน sFTP เท่านั้น

วิธีการติดตั้ง Moodle บน CentOS 7

วิธีการติดตั้ง Moodle บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Moodle เป็นแพลตฟอร์มการเรียนรู้โอเพนซอร์ซหรือระบบจัดการหลักสูตร (CMS) - ชุดซอฟต์แวร์โอเพ่นซอร์สฟรีที่ออกแบบมาเพื่อช่วย

ติดตั้ง NGINX พร้อม ModSecurity บน CentOS 6

ติดตั้ง NGINX พร้อม ModSecurity บน CentOS 6

ในบทความนี้ฉันจะอธิบายวิธีสร้าง LEMP สแต็คที่ได้รับการป้องกันโดย ModSecurity ModSecurity เป็นไฟร์วอลล์เว็บแอพพลิเคชันแบบโอเพนซอร์สที่มีประโยชน์

วิธีการติดตั้ง Apache, MySQL และ PHP บน CentOS 6

วิธีการติดตั้ง Apache, MySQL และ PHP บน CentOS 6

Introduction LAMP เป็นคำย่อที่ย่อมาจาก Linux, Apache, MySQL และ PHP ซอฟต์แวร์นี้เป็นโซลูชันโอเพ่นซอร์สที่ได้รับความนิยมสูงสุดสำหรับการติดตั้ง o

การปรับเปลี่ยน Icinga2 ให้ใช้โมเดลต้นแบบ / ไคลเอ็นต์บน CentOS 6 หรือ CentOS 7

การปรับเปลี่ยน Icinga2 ให้ใช้โมเดลต้นแบบ / ไคลเอ็นต์บน CentOS 6 หรือ CentOS 7

Icinga2 เป็นระบบการตรวจสอบที่มีประสิทธิภาพและเมื่อใช้ในโมเดลลูกค้าหลักจะสามารถแทนที่ความต้องการการตรวจสอบที่อิง NRPE ปรมาจารย์

การติดตั้ง Netdata บน CentOS 7

การติดตั้ง Netdata บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Netdata เป็นดาวรุ่งพุ่งแรงในด้านการติดตามการวัดในระบบแบบเรียลไทม์ เมื่อเปรียบเทียบกับเครื่องมือชนิดเดียวกัน Netdata:

วิธีการติดตั้งและกำหนดค่า Buildbot บน CentOS 7

วิธีการติดตั้งและกำหนดค่า Buildbot บน CentOS 7

Buildbot เป็นโอเพ่นซอร์สเครื่องมือที่ใช้การรวมอย่างต่อเนื่องของ Python สำหรับการสร้างซอฟต์แวร์การทดสอบและการปรับใช้โดยอัตโนมัติ Buildbot ประกอบด้วยหนึ่งหรือหมอ

ติดตั้งเซิร์ฟเวอร์มัลติเพลเยอร์ SA-MP San Andreas บน CentOS 6

ติดตั้งเซิร์ฟเวอร์มัลติเพลเยอร์ SA-MP San Andreas บน CentOS 6

ยินดีต้อนรับสู่การกวดวิชา Vultr อื่น ที่นี่คุณจะได้เรียนรู้วิธีการติดตั้งและเรียกใช้เซิร์ฟเวอร์ SAMP คู่มือนี้เขียนขึ้นสำหรับ CentOS 6 ข้อกำหนดเบื้องต้นคุณจะต้อง

ติดตั้ง dotProject บน CentOS 7

ติดตั้ง dotProject บน CentOS 7

แอปพลิเคชั่น dotProject เป็นเครื่องมือการจัดการโครงการแบบโอเพ่นซอร์สบนเว็บ สำหรับตอนนี้มันวางจำหน่ายภายใต้ GPL ดังนั้นคุณสามารถปรับใช้และใช้งานได้บนบริการของคุณ

ติดตั้ง TaskServer (taskd) บน CentOS 7

ติดตั้ง TaskServer (taskd) บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร TaskWarrior เป็นเครื่องมือจัดการเวลาแบบโอเพ่นซอร์สที่เป็นการปรับปรุงแอพพลิเคชั่น Todo.txt และโคลนของมัน เนื่องมาจาก

วิธีการติดตั้ง Selfoss RSS Reader บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Selfoss RSS Reader บน CentOS 7 LAMP VPS

ใช้ระบบที่แตกต่างกันอย่างไร Selfoss RSS Reader เป็นฟรีและเปิดตัวเองบนเว็บโฮสต์อเนกประสงค์, สตรีมสด, ตอบโต้กับผู้ใช้ได้, ฟีดข่าว (RSS / Atom) reade

วิธีการติดตั้ง Kanboard บน CentOS 7

วิธีการติดตั้ง Kanboard บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร Kanboard เป็นซอฟต์แวร์ซอฟต์แวร์การจัดการโครงการโอเพ่นซอร์สฟรีที่ออกแบบมาเพื่ออำนวยความสะดวกและมองเห็นภาพการทำงานเป็นทีม

การตั้งค่าเซิร์ฟเวอร์ Half Life 2 บน CentOS 6

การตั้งค่าเซิร์ฟเวอร์ Half Life 2 บน CentOS 6

บทช่วยสอนนี้จะกล่าวถึงกระบวนการติดตั้งเซิร์ฟเวอร์เกม Half Life 2 บนระบบ CentOS 6 ขั้นตอนที่ 1: การติดตั้งข้อกำหนดเบื้องต้นเพื่อตั้งค่า ou

ไดรฟ์ที่แชร์ความพร้อมใช้งานสูงใช้ Vultr Block Storage และ GlusterFS

ไดรฟ์ที่แชร์ความพร้อมใช้งานสูงใช้ Vultr Block Storage และ GlusterFS

GlusterFS เป็นระบบไฟล์ที่เชื่อมต่อกับเครือข่ายซึ่งช่วยให้คุณแบ่งปันไดรฟ์สองตัวในอุปกรณ์หลายตัวบนเครือข่ายได้อย่างมีประสิทธิภาพ ระบบไฟล์นี้คือ

วิธีโยกย้ายกล่องจดหมายอย่างง่ายดายด้วย Imapsync บน CentOS 7

วิธีโยกย้ายกล่องจดหมายอย่างง่ายดายด้วย Imapsync บน CentOS 7

ใช้ระบบที่แตกต่างกันอย่างไร ในขณะที่การโยกย้ายเว็บไซต์มักจะไม่มีปัญหาบางครั้งก็ยากที่จะโยกย้ายกล่องอีเมล นี่คือ CAS โดยเฉพาะอย่างยิ่ง

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true