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

บทนำ

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

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

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

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

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

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

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

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

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

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

sudo apt -y install postgresql

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

sudo systemctl start postgresql
sudo systemctl enable postgresql

เปลี่ยนรหัสผ่านสำหรับผู้ใช้ 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.10.0/concourse_linux_amd64 -O /usr/bin/concourse

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

sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/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 useradd 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

[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

[Service]
Type=simple
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.

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

เมื่อเซิร์ฟเวอร์เริ่มทำงานเว็บอินเตอร์เฟสของ 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

sudo apt -y install nginx

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

sudo systemctl start nginx
sudo systemctl enable nginx

เพิ่มที่เก็บ Certbot

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

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

sudo apt -y install certbot

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

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

sudo certbot certonly --webroot -w /var/www/html -d ci.example.com

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

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

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

sudo crontab -e

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

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

งาน cron ข้างต้นจะทำงานทุกวันเวลา 5:30 น. หากใบรับรองถึงกำหนดหมดอายุจะมีการต่ออายุโดยอัตโนมัติ

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

sudo nano /etc/nginx/sites-available/concourse

เติมไฟล์

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 ด้วยโดเมนจริง

เปิดใช้งานไฟล์การกำหนดค่า

sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse

แก้ไขไฟล์ 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 Web, Worker และ Nginx

sudo systemctl restart concourse-worker concourse-web nginx

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



Leave a Comment

เริ่มต้นด้วย SaltStack บน Ubuntu 17.04

เริ่มต้นด้วย SaltStack บน Ubuntu 17.04

SaltStack เป็นโปรแกรมจัดการการกำหนดค่าที่ใช้ python ซึ่งได้รับการปรับให้เหมาะสมสำหรับการทำงานอัตโนมัติของไฟล์การกำหนดค่าการปรับใช้และสิ่งอื่น ๆ

วิธีการติดตั้ง Foreman บน Ubuntu 16.04 LTS

วิธีการติดตั้ง Foreman บน Ubuntu 16.04 LTS

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

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

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

Jenkins เป็นเครื่องมือโอเพ่นซอร์ส CI (การรวมต่อเนื่อง) ยอดนิยมซึ่งใช้กันอย่างแพร่หลายสำหรับการพัฒนาโครงการการปรับใช้และระบบอัตโนมัติ บทความนี้จะ

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

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

SaltStack หรือ Salt เป็นโซลูชันการจัดการการกำหนดค่าโอเพ่นซอร์สที่เป็นที่นิยมซึ่งสามารถใช้ในการดำเนินการทางไกลการจัดการการกำหนดค่า cod

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

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

ใช้ระบบที่แตกต่างกันอย่างไร บทนำการผนวกรวมอย่างต่อเนื่องเป็นแนวปฏิบัติในการพัฒนาซอฟต์แวร์ DevOps ซึ่งจะช่วยให้นักพัฒนาสามารถผสาน th บ่อยครั้ง

ใช้ Chef-solo เพื่อกำหนดค่าแอป Django บน Ubuntu

ใช้ Chef-solo เพื่อกำหนดค่าแอป Django บน Ubuntu

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

Vultr โหลดบาลานเซอร์

Vultr โหลดบาลานเซอร์

Load Balancer คืออะไร Load Balancer นั่งอยู่หน้าแอปพลิเคชันของคุณและกระจายทราฟฟิกที่เข้ามาในหลาย ๆ แอปพลิเคชันของคุณ Fo

วิธีการติดตั้ง Drone CI บน Ubuntu 18.04

วิธีการติดตั้ง Drone CI บน Ubuntu 18.04

บทนำโดรนเป็นแพลตฟอร์มการทดสอบอัตโนมัติและการส่งมอบต่อเนื่องซึ่งทำงานบนโครงสร้างพื้นฐานของคุณเอง Drone รองรับทุกภาษา, บริการ o

วิธีการติดตั้งและกำหนดค่า Ansible บน Debian 9 สำหรับใช้กับ Windows Server

วิธีการติดตั้งและกำหนดค่า Ansible บน Debian 9 สำหรับใช้กับ Windows Server

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

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

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

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

ใช้ SaltStack With Pillars บน Ubuntu 17.04

ใช้ SaltStack With Pillars บน Ubuntu 17.04

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

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

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

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

วิธีการติดตั้งและกำหนดค่า Ansible บน CentOS 7 สำหรับใช้กับ Windows Server

วิธีการติดตั้งและกำหนดค่า Ansible บน CentOS 7 สำหรับใช้กับ Windows Server

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

วิธีการติดตั้ง Strider CD บน Ubuntu 18.04

วิธีการติดตั้ง Strider CD บน Ubuntu 18.04

Introduction Strider CD เป็นแพลตฟอร์มโอเพ่นซอร์สอย่างต่อเนื่อง แอปพลิเคชันเขียนขึ้นใน Node.js และใช้ MongoDB เป็นแบ็กเอนด์หน่วยเก็บข้อมูล สาวเท้า

การสร้างภาพรวมด้วย Packer

การสร้างภาพรวมด้วย Packer

Packer คืออะไร Packer เป็นเครื่องมือสร้างภาพเซิร์ฟเวอร์ที่พัฒนาโดย HashiCorp ภาพเซิร์ฟเวอร์ หรืออีกทางหนึ่งคือโครงสร้างพื้นฐานที่ไม่เปลี่ยนรูปแบบ เป็นทางเลือกที่นิยม

ใช้ Chocolatey Package Manager บน Windows

ใช้ Chocolatey Package Manager บน Windows

บทนำ Chocolatey นำการจัดการแพคเกจที่ทำให้การจัดการซอฟต์แวร์และการอ้างอิงบน Linux เป็นเรื่องง่ายไปยัง Windows คุณสามารถทำได้อย่างรวดเร็วและง่ายดาย

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

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ในขณะที่วิทยาศาสตร์มีวิวัฒนาการไปอย่างรวดเร็ว โดยรับช่วงต่อความพยายามของเราอย่างมาก ความเสี่ยงในการทำให้ตัวเองตกอยู่ในภาวะภาวะเอกฐานที่อธิบายไม่ได้ก็เพิ่มขึ้นเช่นกัน อ่านว่าภาวะเอกฐานอาจมีความหมายสำหรับเราอย่างไร

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

AI ในการดูแลสุขภาพได้ก้าวกระโดดอย่างมากจากทศวรรษที่ผ่านมา ดังนั้นอนาคตของ AI ในการดูแลสุขภาพจึงยังคงเติบโตทุกวัน