Eric Guo's blog.cloud-mes.com

in HTML5, JavaScript, Ruby & Rails, Python, and Cloud MES!

Install Gitlab 14.6 on Ubuntu 20.04 Log

Permalink

Installation gitlab from source is not easy, but it’s worth as it enable me do some edit latter, so here is my installation log.

Create git user and make git user sudo

adduser deployer
sudo su - deployer
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys # and paste your public key
chmod 600 .ssh/authorized_keys
sudo su -
cd /etc/sudoers.d/
echo "deployer ALL=(ALL) NOPASSWD:ALL" > 20-deployer-user

Install build dependencies

sudo apt remove libcurl4 # see https://askubuntu.com/a/1134120/111945
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libre2-dev \
libreadline-dev libncurses5-dev libffi-dev curl openssh-server libxml2-dev libxslt-dev \
libcurl4-openssl-dev libicu-dev logrotate rsync python-docutils pkg-config cmake runit-systemd

Install Ruby 2.7.5

sudo apt install git autoconf bison
mkdir /tmp/ruby && cd /tmp/ruby
curl --remote-name --progress-bar "https://cache.ruby-china.com/pub/ruby/2.7/ruby-2.7.5.tar.gz"
echo '2755b900a21235b443bb16dadd9032f784d4a88f143d852bc5d154f22b8781f1 ruby-2.7.5.tar.gz' | sha256sum -c - && tar xzf ruby-2.7.5.tar.gz
cd ruby-2.7.5
./configure --disable-install-rdoc --enable-shared
make
sudo make install
gem update --system
gem install bundler
gem install --default bundler

Install Go 1.17

wget https://go.dev/dl/go1.17.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz
sudo vi /etc/environment # add :/usr/local/go/bin in PATH
go version

Install Git in gitlab versions

sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev libpcre2-dev build-essential git-core
git clone https://e.coding.net/sew/gitlab/gitaly.git -b 14-6-stable /tmp/gitaly
cd /tmp/gitaly
sudo make git GIT_PREFIX=/usr/local
sudo apt remove -y git-core git
sudo apt autoremove

Install Node.js 14 and other depends

sudo apt-get install -y graphicsmagick
sudo apt-get install -y postfix
sudo apt-get install -y libimage-exiftool-perl
curl --location "https://deb.nodesource.com/setup_14.x" | sudo bash -
sudo apt-get install -y gcc g++ make
sudo apt-get install -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn

System users

sudo adduser --disabled-login --gecos 'GitLab' git

Database

sudo apt install -y postgresql postgresql-client libpq-dev postgresql-contrib

And following the official documentation section.

Redis

sudo apt-get install redis-server

And following the official documentation section.

Clone Gitlab and do some change

Largely following official document.

sudo -u git -H git clone https://e.coding.net/sew/gitlab/gitlab.git -b thape_deploy gitlab
  • need change database.yml to using local user
  • need filling the config/secrets.yml with proper secrets by running rails secret
  • need setting the proxy for go
# setting go proxy
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
sudo chown deployer:deployer -R .bundle/
bundle install
sudo chown git:git -R .bundle/

Install GitLab Shell

cd /usr/bin
sudo ln -s /usr/local/bin/git git
sudo -u git -H bundle exec rake gitlab:shell:install RAILS_ENV=production
cd /home/git/gitlab-shell/
sudo -u git -H make
cd /home/git/gitlab/
sudo -u git -H bundle exec rake gitlab:shell:install RAILS_ENV=production

Install GitLab Workhorse

sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse,https://e.coding.net/sew/gitlab/gitlab-workhorse]" RAILS_ENV=production
cd /home/git/gitlab-workhorse
sudo -u git -H git checkout -b 8-65-stable
cd /home/git/gitlab
sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse,https://e.coding.net/sew/gitlab/gitlab-workhorse]" RAILS_ENV=production

Install GitLab-Elasticsearch-indexer on Enterprise Edition

sudo su - git
cd /home/git
git clone https://e.coding.net/sew/gitlab/gitlab-elasticsearch-indexer.git
logout
cd /usr/bin
sudo ln -s /usr/local/go/bin/go go
cd /home/git/gitlab
sudo -u git -H bundle exec rake "gitlab:indexer:install[/home/git/gitlab-elasticsearch-indexer,https://e.coding.net/sew/gitlab/gitlab-elasticsearch-indexer.git]" RAILS_ENV=production

Install GitLab Pages

cd /home/git
sudo -u git -H git clone https://e.coding.net/sew/gitlab/gitlab-pages.git
cd gitlab-pages
sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
sudo -u git -H make

Install Gitaly

Beside following documents, also need to do a bundler install in ruby folder and configure-authentication.

cd /home/git/gitlab
sudo -u git -H bundle exec rake "gitlab:gitaly:install[/home/git/gitaly,/home/git/repositories,https://e.coding.net/sew/gitlab/gitaly.git]" RAILS_ENV=production

Some configure after install

I only record I do:

  1. trusted-proxies

Using Patch-package to Tuning CSS in 3rd Party Packages

Permalink

Add patch-package

yarn add patch-package postinstall-postinstall

Apply the change

Open sublime-text and modify the source code

Generate the patch

yarn patch-package viewerjs

Auto patch

"private": true,
+ "scripts": {
+ "postinstall": "patch-package"
+ },
"dependencies": {

Resolve G++ Error Unrecognized Command Line Optionstd=c++14

Permalink

When I try to deploy next 10 in CentOS 7, which required a npm package deasync which using C++ 14 feature, but the CentOS 7 gcc not support, so below is how to resolved.

yum list | grep gcc
yum install centos-release-scl-rh
yum install llvm-toolset-7-clang
yum install centos-release-scl
yum install devtoolset-7-gcc.x86_64 && yum install devtoolset-7-gcc-c++.x86_64
# or yum install devtoolset-7-toolchain
scl enable devtoolset-7 bash
yarn install

You only need to enable devtoolset-7 once when do the yarn install, after that the node_modules will having the library so no need enable in every deploy.

Rails Developer Installation Log on MacBook M1 Pro

Permalink

I got my third MacBook Pro today. It’s the first Apple Silicon CPU Mac. I bought in JD and due to I choose the base model, it’s arrived with in only 10 hours later.

Mac App Store install list

  • AdBlock Pro (10.0.5)
  • Affinity Designer (1.10.4)
  • Affinity Photo (1.10.4)
  • Affinity Publisher (1.10.4)
  • Artstudio Pro (3.2.16)
  • Diagrams (2.2.0)
  • Elmedia Video Player (8.1)
  • iA Writer (5.6.16)
  • iMovie (10.3.1)
  • Instapaper Save (1.2)
  • Jump Desktop (8.8.16)
  • Keynote (11.2)
  • LiquidText (2.1.4)
  • Logoist 4 (4.2.1)
  • Mate Translate (7.1.1)
  • MathStudio (8.1.1)
  • MockFlow (2.4.3)
  • Numbers (11.2)
  • OwlOCR (4.9.2)
  • Pages (11.2)
  • PasteNow (1.10)
  • PDF Expert (2.5.18)
  • Pixelmator Pro (2.3)
  • SimpleMind Pro (1.30.2)
  • Slack (4.22.1)
  • SQLPro Studio (2021.104)
  • Tampermonkey (4.13.6140)
  • Tweetbot (3.5.7)
  • WeChat (3.2.1)
  • Xcode (13.1)
  • 腾讯视频 (2.26.0)

brew install cask list

  • aldente
  • chromedriver
  • chromium
  • dash
  • discord
  • evernote
  • figma
  • google-chrome
  • hype
  • imageoptim
  • marginnote
  • obs
  • paw
  • sublime-merge
  • sublime-text
  • viscosity
  • zoom

brew install console list

  • node
  • ruby
  • bash
  • gh
  • git
  • gdu
  • libxml2
  • memcached
  • percona-server
  • postgresql
  • puma-dev
  • redis
  • yamllint
  • yarn
  • highlight
  • jq
  • unrar
  • imagemagick
  • mas
  • minio
  • smartmontools
  • git-filter-repo
  • git-trim
  • libpq
  • rabbitmq
  • go
  • rust
  • watchman

Setting ruby .gemrc

.gemrc
---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://rubygems.org/
:update_sources: true
:verbose: true
:concurrent_downloads: 8
gem: "--no-document"

Copy user fonts and directory

Copy original ~/Library/Fonts and ~/Library/Dictionaries to new mac, which install the fonts and dictionary.

Import GnuPG and setting signing key

brew install gnupg
gnupg
cd ~/.gnupg/
echo 'keyserver hkps://keys.openpgp.org' >> gpg.conf
gpg --search yejun@hey.com
# or download by search at browser https://keys.openpgp.org
gpg --import DCC53DBA60DA2A97EED85CFE0F3E2C6AF4CAAD99.asc
gpg --list-secret-keys user@example.com
gpg --export-secret-keys YOUR_ID_HERE > gpg_ericguocz_private.key
gpg --import gpg_user_private.key
gpg --list-secret-keys --keyid-format=long
git config --global user.signingkey 0F3E2C6AF4CAAD99
git config --global commit.gpgsign true

.profile

export PATH="/opt/homebrew/opt/ruby/bin:$PATH:$HOME/.cargo/bin"
export HISTSIZE=8000
export ADBLOCK=true
export HOMEBREW_GITHUB_API_TOKEN=
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
# export RUBYOPT=-w
export EDITOR="vim"
export BUNDLER_EDITOR="subl"
export GEM_EDITOR="subl"
export USE_OFFICIAL_GEM_SOURCE="true"
export HOMEBREW_EDITOR="subl"
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
export BASH_IT_HTTP_PROXY=http://127.0.0.1:6152/
export BASH_IT_HTTPS_PROXY=http://127.0.0.1:6152/
export BYEBUG_SERVER_PORT=1048
export GITHUB_APP_ID=
export GITHUB_APP_SECRET=
export CIRCLE_TOKEN=
# export TNS_ADMIN=/usr/local/network/admin/
# export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NO_ORACLE_ENHANCED=1
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
export PUPPETEER_EXECUTABLE_PATH=/opt/homebrew/bin/chromium
export BLUEDOC_HOST=https://bluedoc.test
export DEVISE_JWT_SECRET_KEY=
export START_DIR="/Users/guochunzhong/git"
if [[ $PWD == $HOME ]]; then
cd $START_DIR
fi
eval "$(/opt/homebrew/bin/brew shellenv)"

Install Node.js 16 Stack in TencentOS Server 3.1

Permalink

TencentOS Server is Tencent’s copy cat version of RHEL 8. Compare with Ali’s OpenAnolis, TencentOS seems more open, at least the kernel can be found at Github, but same as many China big internet company, the source code is open source once a year. I try to install my familiar Rails web framework on it and here is the log.

Install htop

yum update -y && yum install htop && reboot

Install locale

yum install langpacks-en glibc-all-langpacks -y
localectl set-locale LANG=en_US.UTF-8

Create the deployer user

adduser deployer
sudo su - deployer
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys # and paste your public key
chmod 600 .ssh/authorized_keys

Enable deployer as sudo

sudo su -
cd /etc/sudoers.d/
echo "deployer ALL=(ALL) NOPASSWD:ALL" > 20-deployer-user

Secure the ssh by turn off root and password

sudo tail /etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication no

Install node.js 14 & yarn

sudo dnf module install nodejs:14
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn

Install Rails 6 Stack in OpenAnolis Linux

Permalink

OpenAnolis released as alternative distribute linux of CentOS. After got a server at Aliyun double 11 sales, I try to install my familiar Rails web framework on it.

I start installing the Linux server by do a system upgrade:

sudo yum update -y && sudo reboot

But install htop in Anolis linux is not as easy as CentOS, it’s require enable epel explicitly.

sudo yum config-manager --set-enabled PowerTools
sudo yum update
sudo yum --disablerepo="*" --enablerepo="epel" list available | grep htop
sudo yum --disablerepo="*" --enablerepo="epel" install htop

Install locale

yum install langpacks-en glibc-all-langpacks -y
localectl set-locale LANG=en_US.UTF-8

Create the deployer user

adduser deployer
sudo su - deployer
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys # and paste your public key
chmod 600 .ssh/authorized_keys

Enable deployer as sudo

sudo su -
cd /etc/sudoers.d/
echo "deployer ALL=(ALL) NOPASSWD:ALL" > 20-deployer-user

Secure the ssh by turn off root and password

sudo tail /etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication no

Install memcached & redis

sudo yum install memcached
sudo systemctl enable memcached
sudo yum install redis
sudo systemctl enable redis

Install node.js 16 & yarn

rpm -q --whatprovides centos-release # get anolis-release-8.4-6.an8.x86_64
curl -fsSL https://rpm.nodesource.com/setup_16.x > install_node.sh
vi install_node.sh
# find & append anolis in below line
# if [[ $DISTRO_PKG =~ ^(redhat|centos|almalinux|rocky|cloudlinux|mageia|sl|anolis)- ]]; then
sudo bash ./install_node.sh
sudo yum install -y nodejs
sudo yum install gcc-c++ make
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn

Install dependencies required by rbenv and Ruby

yum install openssl-devel readline-devel zlib-devel gdbm-devel git

Install rbenv and ruby-build in deployer user

cd # as a deployer
git clone https://github.com/rbenv/rbenv.git .rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
~/.rbenv/bin/rbenv init # As an rbenv plugin
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
mkdir -p "$(rbenv root)"/plugins
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
git clone https://github.com/andorchen/rbenv-china-mirror.git "$(rbenv root)"/plugins/rbenv-china-mirror

Install ruby 3.0.2

rbenv install -l
rbenv install 3.0.2
rbenv global 3.0.2
rbenv shell 3.0.2
echo "gem: --no-document" > ~/.gemrc
gem update --system

Create postgresql db user and import DB

sudo su - postgres
createuser deployer
psql
ALTER ROLE deployer LOGIN;
CREATE DATABASE sccsa_production WITH ENCODING='UTF8' OWNER=deployer;
logout
psql -d sccsa_production -f sccsa_postgres_db.sql

Install snapd

sudo dnf install epel-release
sudo dnf upgrade
sudo yum install bash-completion
sudo yum install policycoreutils-python-utils
sudo yum --disablerepo="*" --enablerepo="epel" install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install core; sudo snap refresh core

Install certbot

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

Extend the Disk Size in Ubuntu 20.04 Which Running in VMware

Permalink

Ubuntu extend disk is different with CentOS, largely using cloud-guest-utils tools.

apt-get install cloud-guest-utils
parted -l # Usually sda 3 is the root fs
growpart /dev/sda 3
pvs # To get the PV name
pvresize /dev/sda3
df -h # find /dev/mapper/ubuntu--vg-ubuntu--lv or similar
lvextend -r -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

Largely copy from unix stackexchange.

Deploy Rails 7 Master With Webpacker 6 and Tailwind CSS JIT App in CentOS 8

Permalink

Got the newest CentOS 8 (4.18.0-305.12.1.el8_4.x86_64) and ready to install newest Rails 7 and here is the steps.

Disable SELinux

vi /etc/selinux/config

Install locale

dnf install langpacks-en glibc-all-langpacks -y
localectl set-locale LANG=en_US.UTF-8

Turn on EPEL and install htop

yum -y install epel-release
yum install htop

Install node.js 16 & yarn

curl --silent --location https://rpm.nodesource.com/setup_16.x | bash -
yum install -y gcc-c++ make
yum install -y nodejs
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
yum install yarn

Install dependencies required by rbenv and Ruby

yum install openssl-devel readline-devel zlib-devel gdbm-devel git

Setup second user account

adduser matlib
cd /etc/sudoers.d/
echo "matlib ALL=(ALL) NOPASSWD:ALL" > 20-matlib-user
sudo su - matlib
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys # and paste your public key
chmod 600 .ssh/authorized_keys

Install rbenv and ruby-build

cd # as a matlib
git clone https://github.com/rbenv/rbenv.git .rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
~/.rbenv/bin/rbenv init
# As an rbenv plugin
mkdir -p "$(rbenv root)"/plugins
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
git clone https://github.com/andorchen/rbenv-china-mirror.git "$(rbenv root)"/plugins/rbenv-china-mirror

Install Ruby 3.0.2

rbenv install -l
rbenv install 3.0.2
rbenv global 3.0.2
rbenv shell 3.0.2
eval "$(rbenv init -)" >> ~/.bash_profile
echo "gem: --no-document" > ~/.gemrc
gem update --system

Fix permission for CentOS

sudo mkdir /var/www
cd /var/www
sudo mkdir matlib
sudo chown matlib:matlib matlib/

Install nginx

yum install nginx
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload