Staging Server
Stating Server
Login Info
OS | ubuntu-server |
Local Domain | portal.bls.com |
IP Address | 192.168.1.194 |
Username | bls |
Password | bls |
Remote
- For the first time you remote, create the ssh key by running the following script:
echo "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFB\
QUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUNGd0FBQUFkemMyZ3RjbgpOaEFBQUFB\
d0VBQVFBQUFnRUF1NGwzU1VJeXZHZzF3d0ZmRWRja3V2R0Njd2tOcW1td0xPSm1kd2JWUXNqRVNH\
WFVSdSthCjdsbDJhTnhDL3hUVnMyZG9yZ0NaTEdxaFY3ZHNpYVlVQjZGNHhtV0w0amVFaUt5c1Vs\
VTBheFhWS3NoRzRLbFdEeUxZZVAKTFQzRkoza2xYS2NtNDlzWUlFeCt2S29PNGV2Q0JyeHNMTGxV\
anM5cnFlL1hFSlVHM0JJNzZBVElwNHlLWnVzY0VPbkRQSwo1dFpXaWtEWWpxTis4bS9TbHo4Yy9N\
WG9rNW40QnF1bnFVb20yM0xtYjE4K2d3Q3dXQ2NBWTdyL2hlV1lOcU5iMEJNd2ZOClNuVS9XdTJW\
cTRieFBuVUY2bURJSFM0anRvYXN6R1IvdjNmU3B4MHV5ZjdlZTd1Q0ZMWTlEa0ZoMkszNmVGNDll\
ZDR1aTQKVWNsSVRUUEFUMDFxWGN0S3RxdFM3aElPU1IxMG4wcGFKNllkWnhQTkxrV01lbkZPS3lk\
WkJkRGdGbmtFTHB2a0tmNkp6dApONFBiMU1DUFNVUGZoR3hNT2x1YndSRWR6VmpSSDRJVDVDTGpD\
VkpucTJEdjl0OGRkK0o5ajVnVzU5ejRzM2FuV3hJZ2JpCitBNXVXZXhYLzIvZ1NFK0REdW8xMjlh\
aGRGVFBqMHZQbkl1RzAvZ3hvQjdPUTFLVms4Ylh6dm83SFZ6MkU3M01XQWxNSFkKMkxUd0ZuYUhV\
cDJGT1VjL0tXQm83bGx2Zy94b3Y5Y0dnamxZTWozaFZpYlM1RVJFMENYUWczRVV2YVFZR3EwMGNa\
dmR1QQpuMytoTys2UmQ1TlYvWE90VUk3bkRhK3ZLSlhycHBsa2IydnFYUkJ3SEh0c1dITXlNU0M4\
VmRGVU1VOUF2QjIrZGRNcWhLCmNBQUFkSWIvWUFSMi8yQUVjQUFBQUhjM05vTFhKellRQUFBZ0VB\
dTRsM1NVSXl2R2cxd3dGZkVkY2t1dkdDY3drTnFtbXcKTE9KbWR3YlZRc2pFU0dYVVJ1K2E3bGwy\
YU54Qy94VFZzMmRvcmdDWkxHcWhWN2RzaWFZVUI2RjR4bVdMNGplRWlLeXNVbApVMGF4WFZLc2hH\
NEtsV0R5TFllUExUM0ZKM2tsWEtjbTQ5c1lJRXgrdktvTzRldkNCcnhzTExsVWpzOXJxZS9YRUpV\
RzNCCkk3NkFUSXA0eUtadXNjRU9uRFBLNXRaV2lrRFlqcU4rOG0vU2x6OGMvTVhvazVuNEJxdW5x\
VW9tMjNMbWIxOCtnd0N3V0MKY0FZN3IvaGVXWU5xTmIwQk13Zk5TblUvV3UyVnE0YnhQblVGNm1E\
SUhTNGp0b2FzekdSL3YzZlNweDB1eWY3ZWU3dUNGTApZOURrRmgySzM2ZUY0OWVkNHVpNFVjbElU\
VFBBVDAxcVhjdEt0cXRTN2hJT1NSMTBuMHBhSjZZZFp4UE5Ma1dNZW5GT0t5CmRaQmREZ0Zua0VM\
cHZrS2Y2Snp0TjRQYjFNQ1BTVVBmaEd4TU9sdWJ3UkVkelZqUkg0SVQ1Q0xqQ1ZKbnEyRHY5dDhk\
ZCsKSjlqNWdXNTl6NHMzYW5XeElnYmkrQTV1V2V4WC8yL2dTRStERHVvMTI5YWhkRlRQajB2UG5J\
dUcwL2d4b0I3T1ExS1ZrOApiWHp2bzdIVnoyRTczTVdBbE1IWTJMVHdGbmFIVXAyRk9VYy9LV0Jv\
N2xsdmcveG92OWNHZ2psWU1qM2hWaWJTNUVSRTBDClhRZzNFVXZhUVlHcTAwY1p2ZHVBbjMraE8r\
NlJkNU5WL1hPdFVJN25EYSt2S0pYcnBwbGtiMnZxWFJCd0hIdHNXSE15TVMKQzhWZEZVTVU5QXZC\
MitkZE1xaEtjQUFBQURBUUFCQUFBQ0FBRi9JRmVTVXF0VVBaR1gwalZuUFNETXlwaTJhc2lBWFdx\
TwpSL2tOTWVoOWg2dDRQSkJ3V3hFcDM1c0ludlJBSzFCcU05aW5vcEZMTEl4eHAwa1Y3VFQrWWVO\
YmJobFpEaEsxSmc3bUpTCnZ4bWFqa3ZrUU90ZVFiQ0JVM0F0L1FQS29MU3psTWpldDd1U1FMU3F1\
c0dzeXZpWXlsZzFCbXE1VndlZEpWODVnVHVDWGIKNEZROENxaTNRMHpoMkljQWxzN3V5UFFEZm5i\
czhSZG9Nd3NIOHVoRmdBeWxmdWcydUhqT1lhOEFwTHdneTNQcUxuNFZtWgpneUp0WGZ0aTVCY1hz\
Z25CTnk4djdsaUFhdUJhakZST1JNVFJEdWZFdFg1QVp1S2VyckpOZDMzajZycXI4UVNWdzN6ODAx\
CkhvemFvWUFWYXlrZFVHSStMekpmNDliUjRlZjhtMW9xR0pvdDNMbkNHYTVBVlZ4Z3VoM3lFVjNW\
a0o2c05KNmM5amdxYjAKZjRIZk02QVpXREZCaUp5dUsrZlZYa2dtcXh5N1g5WlhTd2Nad3lYQ09O\
MDZoQk5BaGdiSWZURm8wVVhmUzNwcjMwS1NIaQpITWtLL3A1YUhadHBPY1lHNWRsL3IvSnpzd1Ju\
SGxkV0o4eVFZUXh4Y29FVk54TlZySDg3TlBXWVZHcWovVWppMnNBYkhJCllRV3J2bGhnbXNyNTY5\
dHMzVFJ0UCtQWlB1SGNSRUVCbDlTNTB1WStzSTdFWkJuZTE3bmZUQXNXU0k3YzJ0ODBmWWdSZVUK\
Q0pXcDFYVExLaDZCcEoxbmhUak9pOUwrLzV6a21SUFRFSmRNTjhQYlllb2dOTVpmV1JpQnRIM2dY\
a2lwSnozU3VWWUc4KwpKQzg0MUVVV0Z5d3BrWGluamhBQUFCQUgwNCtzTjdoaEd6a3pwNFRWMWpn\
T0NZWjRBSk9NWi9IZkZ6dCsrRTVsdmhYUTVSCmFnaHVWZW0rVDJkSkxOd083Q2ZyUVE5ZW4wUjZ3\
azl1WWNCcmsyVVJPS0J2eTVnTHAvYmNxWTlPcUdpUDJGOEdtM3M4ekwKWGFvNWlsVW9hdGlSU21O\
WGR2MERTY1BaUnU0ak5acUhrcDcycG9DVC9NZ2JzcG96OE55dU93bGpwS3hzQXppaXorY0JrSgp5\
TnBZQjZvcXdvZ2hnM2NWTDRSZmtpeXEvS2NaVE10eFdKaFRxUmpXbmpJRnE3N2ZCUVMvVFpKYzZh\
V1hxVGVHWFpsRFZzCnRzMkN2Y01CQ1pqKzN5VWx1R2ovbTBqZVdhRk00bXRZTHVCQ0N5Q0FVSVIz\
NUsyWFk0WUpRNDg5MkI4Wk45bytBdnFoelUKNnlaNHBFV2dFTWdtRVVJQUFBRUJBT0xtSlhHaWRU\
TFpYSTZ5Z3FEZGN2L1FKM1hSd20rOEN1V1YzRHZrZDJUZnVBd3ZHcgpUYmdna0ZZdzdNYjlVQnlC\
c3ZrOExMUWprTVh5UFZzYXRmbzdYUC93SktUbTUxMGNGTVo3a2ZoVWJ4OHBvSkZQNXZNUEpTCkNN\
ZTlJemNoUWF1WWU3M2luVXI2eTVnb0FyU3Mrc0pNdzg2MmpMTkM2YmRKTjE2WVVBb3VoeHp0UWFs\
NExiMzdLUTQ1VFUKU25XRlJWMnAxamhkSno0V051cG1nS052L0o2bTVLL05PcnZCQkRXeWRkZGNK\
bTJuNnVUOGlPRDBlMFdaQzE0NmxiQk1hego0RXdjRDM2STBzNHdrUTQySnU3M0V1bnFBNisrTTM4\
aU8zM1IzVVJ6dTA0Z3R4MkVCZEd6UTFSd1FZZ2tDd0FPYkYzeWtiCkRIZ1BSRVY0RDkraGNBQUFF\
QkFOT1c3clZPRGxaQjgvd0wwVCtZU3hYc0RzaGZSVG1nY014OFZmaFBOU2NXdUVmcG1Hd2sKL251\
Ukl3T1ozWllwNmJkL085SWpKMEl4RGc1S0ZzT3VDOGh5cTMraFRYTFhmMS90SVM2NXZVOEZQdXVy\
MzlQWmlPSW1PUApHQ1YzcXRuSHF0cUJyNVVDTldUTDFwdTFQTGNvbi9OU2cvME1NL0Nnd0ttaTlK\
S3JQQ0FzZ29DdVNGTUVKUUZKcmFDclQ1CmR3VDVkbWU1MCtYWXBHZlpXUFpFSjRkL1lEVHlOVXNW\
NmloeVRCNko1MHA2ZUNGRWZ2Zjd0NWpBOXhQeVhtTXZhTlBsODAKTFJBWk1uS3A1aUFkUjVnRWc4\
OUhlQ1NQMzZyd1YxZlBQUDFGQ0p2eTRuNC9mRER0NjRiYjNMSnhhS21ZRW10YVZtYVZtZwovbVdw\
TG1mc3MvRUFBQUFPWkdGMGFIVkFWR2xsYmw5RVlYUUJBZ01FQlE9PQotLS0tLUVORCBPUEVOU1NI\
IFBSSVZBVEUgS0VZLS0tLS0K" | base64 -d > ~/.ssh/id_rsa
- From now on, you just need to run this command to remote to server from any terminal:
ssh [email protected]
Setup
SSH
SSH stands for Secure Shell, and as its name is saying, it is used to establish a secure connection between the client and its server. By default, every Linux based operating system supports SSH. SSH protocol is typically used for accessing, commanding, and transferring files remotely. So, in this section, you will demonstrate to generate SSH keys and use them to protect the server and precious information.
SSH Key Generation
From your local system, run:
ssh-keygen -t rsa -b 4096
Just press Enter to select the default provided file and passphrase.
A key pair consists of Private and Public key files named id_rsa and id_rsa.pub respectively in the ~/.ssh directory.
Copying the SSH key to remote server
ssh-copy-id [email protected]
After running the above command, it will confirm from you to continue the connection; type “yes” to continue. Then type “bls” if server password is requried.
Sharing the SSH key
Go to ~/.ssh
directory, rename the file id_rsa
to staging.pem
, then share it to your team. So they can connect with the command:
ssh -i staging.pem [email protected]
Static IP Address Config
To configure a static IP address on your Ubuntu server you need to modify a relevant netplan network configuration file within /etc/netplan/
directory.
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses: [192.168.1.194/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
version: 2
Once ready apply changes with:
sudo netplan apply
Docker
Installation, please follow Install Docker Engine on Ubuntu
Or run this script:
# 1. download the script
curl -fsSL https://get.docker.com -o install-docker.sh
# 2. using sudo to perform the installation.
sudo sh install-docker.sh
Jenkins
Installation, follow Jenkinks Docker Installation
Login credential:
admin
Continenta@#1
GitHub Webhooks:
Add webhook to repo by browse repo on web, go to Settings > Webhooks > Add webhook.
In the form Payload URL, insert the url below
http://115.79.201.246:23997/webhooks
I built a reverse proxy to redirect public ip to Jenkins container. So Jenkins can know when ever code are push.
Thank Tuan DM for support me to forward port 23997.
Start all stacks
- Clone the deployment repository:
git clone https://blogic-datht:[email protected]/blogic-datht/staging-deployment composes
- Start all containers:
# Go to docker composes folder
cd composes
# Set execute permission
sudo chmod +x start-all.sh
# Start all container
./start-all.sh
Restore database
- Start database container
# First, start the database container
docker compose -f composes/database/docker-compose.yaml up -d
# Create backup folder in database container
docker exec -it database mkdir /var/opt/mssql/backup
- Prepare database backup files in home folder
BLogicPOSExpress | BLogicPOSExpress.bak |
BlogicLicenses | BlogicLicenses.bak |
BLOGICPOS9 | BLOGICPOS9.bak |
BLOGICREVIEWER | BLOGICREVIEWER.bak |
- Copy backup files to backup folder located in
composes/database/backup
- Restore databases
docker exec -it database /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P 'S3cur3P@ssW0rd!' \
-i "/var/opt/mssql/backup/restore.sql"
or
/******
Replace 'DUMP' with the desired name of the database that is being restored.
BLOGICPOS9
BlogicLicenses
BLogicPOSExpress
BLOGICREVIEWER
******/
DECLARE @DatabaseName AS VARCHAR(255) = 'DUMP'
-- Declare the path variables
DECLARE @NewLine AS CHAR(2) = CHAR(13) + CHAR(10)
DECLARE @Path AS NVARCHAR(255) = '/var/opt/mssql/'
DECLARE @BackupFilePath AS VARCHAR(255) = @Path + 'backup/' + @DatabaseName + '.bak'
DECLARE @DataFilePath AS VARCHAR(255) = @Path + 'data/' + @DatabaseName + '.mdf'
DECLARE @LogFilePath AS VARCHAR(255) = @Path + 'data/' + @DatabaseName + '_log.ldf'
-- Drop the database if it exists
DECLARE @DropDB AS NVARCHAR(MAX)
SET @DropDB =
'USE master;' + @NewLine +
'IF DB_ID(' + QUOTENAME(@DatabaseName, '''') + ') IS NOT NULL' + @NewLine +
' BEGIN' + @NewLine +
' ALTER DATABASE ' + @DatabaseName + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE;' + @NewLine +
' DROP DATABASE ' + @DatabaseName + ';' + @NewLine +
' END;'
PRINT @DropDB
EXEC sp_executesql @DropDB
PRINT @NewLine
-- Restore the database with backup file
DECLARE @RestoreDB AS NVARCHAR(MAX)
SET @RestoreDB =
'RESTORE DATABASE ' + @DatabaseName + ' FROM DISK = ' + QUOTENAME(@BackupFilePath, '''') + ' WITH ' + @NewLine +
' MOVE ' + QUOTENAME(@DatabaseName, '''') + ' TO ' + QUOTENAME(@DataFilePath, '''') + ', ' + @NewLine +
' MOVE ' + QUOTENAME(@DatabaseName + '_log', '''') + ' TO ' + QUOTENAME(@LogFilePath, '''') + ';'
PRINT @RestoreDB
EXEC sp_executesql @RestoreDB
Create cron job auto backup database everyday
- Prepare:
# Go inside database container
docker exec -it database bash
# Install vim & crontab
apt-get update
apt-get install vim -y
apt-get install cron -y
- Create cron job
# Open cron config by cli
crontab -e
Insert this line to the end of the config:
00 12 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'S3cur3P@ssW0rd!' -i "/var/opt/mssql/backup/backup.sql"
This will trigger backup.sql script at 12:00 PM everyday