Повстання машин: застосування ШІ в реальному світі
Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.
Безперервна інтеграція — це практика розробки програмного забезпечення DevOps, яка дозволяє розробникам часто об’єднувати змінений код у спільне сховище багато разів на день. Після кожного злиття виконуються автоматичні збірки та тестування для виявлення проблем у коді. Це дозволяє розробникам швидко знаходити та усувати помилки, щоб покращити якість програмного забезпечення та забезпечити безперервну доставку програмного забезпечення. Перемикатися з Concourse туди і назад дуже легко, оскільки він зберігає всю свою конфігурацію в декларативних файлах, які можна перевірити в системі контролю версій. Він також забезпечує веб-інтерфейс користувача, який відображає інформацію про збірку в інтерактивному режимі.
Обов’язково замініть усі випадки 192.0.2.1та ci.example.comна вашу фактичну публічну IP-адресу Vultr та фактичне доменне ім’я.
Оновіть свою базову систему за допомогою посібника Як оновити CentOS 7 . Після оновлення системи перейдіть до встановлення 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надійним паролем. Запишіть пароль, оскільки він знадобиться пізніше в підручнику.
Створіть нову базу даних для Concourse.
CREATE DATABASE concourse OWNER concourse;
Вийдіть з psqlоболонки.
\q
Перейдіть до користувача sudo з поточного користувача postgres.
exit
Завантажте останню версію виконуваного файлу Concourse і збережіть його, /usr/binщоб його можна було виконувати безпосередньо. Останню версію двійкових файлів Concourse і Fly можна знайти на сторінці завантаження Concourse . Нові випуски дуже часті. Замініть посилання нижче новим посиланням для останньої версії.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse
Аналогічно завантажте останню версію виконуваного файлу fly і збережіть його в /usr/bin.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly
Fly — це інтерфейс командного рядка для підключення до API ATC Concourse CI. Fly доступний для кількох платформ, таких як Linux, Windows і MacOS.
Призначте дозвіл на виконання завантаженим concourseі flyдвійковим файлам.
sudo chmod +x /usr/bin/concourse /usr/bin/fly
Перевірте, чи Concourse і Fly працюють правильно, перевіривши їх версію.
concourse -version
fly -version
Пари ключів RSA забезпечують спосіб шифрування зв'язку між компонентами Concourse.
Щоб Concourse працював, необхідно створити принаймні три пари ключів. Для шифрування даних сеансу створіть файл session_signing_key. Цей ключ також буде використовуватися TSA для підпису запитів, які він робить до ATC. Щоб захистити сервер TSA SSH, створіть файл tsa_host_key. Нарешті, створіть 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 надає два окремих компонента, які потрібно запустити, веб і робочий файл. Запустіть веб-сайт 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параметр після видалення основних параметрів аутентифікації.
Once the web server is started, the following output should be displayed.
{"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"}}
Stop the server for now, as a few more things still must be setup.
Start the 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
The above command will assume that the TSA is running on localhost and listening to the default port 2222.
Though the Concourse web and worker can be started easily using the commands above, it is recommended to use Systemd to manage the server.
Using Systemd service for managing the application ensures that the application is automatically started on failures and at boot time. The Concourse server does not take data from any configuration file, but it can access the data from environment variables. Instead of setting global environment variables, create a new file to store the environment variables and then pass the variables to the Concourse CI using the Systemd service.
Create a new environment file for Concourse web.
sudo nano /opt/concourse/web.env
Populate the file.
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
Change the username and password of the BASIC_AUTH if desired. Make sure that the path to the key files are correct and make sure that the correct value for username and password in the PostgreSQL database configuration is provided.
Similarly, create an environment file for the worker.
sudo nano /opt/concourse/worker.env
Populate the file.
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
As the environment files contain username and passwords, change its permissions so that it cannot be accessed by other users.
sudo chmod 600 /opt/concourse/*.env
Now create a new user for Concourse to run the web environment. This will ensure that the web server is running in an isolated environment.
sudo adduser --system concourse
Give the concourse user ownership over Concourse CI file's directory.
sudo chown -R concourse:concourse /opt/concourse
Create a new systemd service file for the Concourse web service.
sudo nano /etc/systemd/system/concourse-web.service
Populate the file.
[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
Save and close the file. Create a new service file for the Concourse worker service.
sudo nano /etc/systemd/system/concourse-worker.service
Populate the file.
[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
The web and worker service can now be started directly by running:
sudo systemctl start concourse-web concourse-worker
To enable the worker and web process to automatically start at boot time, run:
sudo systemctl enable concourse-worker concourse-web
To check the status of services, run:
sudo systemctl status concourse-worker concourse-web
If the service is not started, or in the FAILED state, remove the cache from the /tmp directory.
sudo rm -rf /tmp/*
Restart the services.
sudo systemctl restart concourse-worker concourse-web
Notice that this time the services have started correctly. The output upon verifying the status of the services should be simil.
[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.
Adjust your firewall to allow port 8080, on which ATS is running and port 2222, on which TSA is running.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
Once the server is started, the web interface of the Concourse CI can be accessed by going to http://192.0.2.1:8080 in any browser. Log in using the username and password provided in the environment file.
To connect to the server using Fly, run:
fly -t my-ci login -c http://192.0.2.1:8080
The above command is used for initial login to the server. -t is used to provide a target name. replace my-ci with any desired target name. The above command will log in to the default team main. It will ask for the username and password provided in the environment file.
The output will look like the following.
[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 можна завантажити з сайту завантаження або з веб-інтерфейсу сервера.
Імена для входу та інша інформація, надіслана через веб-інтерфейс на сервер Concourse, не захищені. З'єднання не зашифроване. Зворотний проксі-сервер Nginx можна налаштувати за допомогою безкоштовного SSL Let's Encrypt.
Встановіть веб-сервер 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
Примітка
To obtain certificates from Let's Encrypt CA, the domain for which the certificates are to be generated must be pointed towards the server. If not, make the necessary changes to the DNS records of the domain and wait for the DNS to propagate before making the certificate request again. Certbot checks the domain authority before providing the certificates.
Згенеруйте сертифікати SSL.
sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com
Згенеровані сертифікати, ймовірно, будуть збережені в /etc/letsencrypt/live/ci.example.com/каталозі. Сертифікат SSL буде збережено як, fullchain.pemа закритий ключ – як privkey.pem.
Термін дії сертифікатів Let's Encrypt закінчується через 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на фактичний домен.
Відредагуйте файл середовища, створений для Concours 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.
Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.
Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.
Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.
Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.
Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…
Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.
Прочитайте блог, щоб дізнатися про різні шари архітектури великих даних та їх функціональні можливості найпростішим способом.
Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.
У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.
Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше