BESTNET Tech Blog
BESTNET-CLOUD पर Redmine बनाने के स्टेप्स #
Redmine 6.1 सीरीज़ लॉन्च करने के लिए
Ubuntu 24.04 / Apache + Passenger / PostgreSQL / HTTPS सर्वर सेटअप गाइड
यह लेख BESTNET-CLOUD पर प्रोविज़न की गई Ubuntu 24.04 LTS वर्चुअल मशीन पर Redmine बनाने के स्टेप्स बताता है,
उस बिंदु तक जहाँ आप पहली बार ब्राउज़र से लॉगिन कर सकते हैं।
LDAP/LDAPS इंटीग्रेशन, external SMTP और Zabbix इंटीग्रेशन आगे आने वाले अलग लेखों में कवर किए जाएँगे।
यह गाइड एक स्थिर Redmine सर्वर पूरा करने पर केंद्रित है जो लॉगिन स्क्रीन भरोसेमंद ढंग से दिखा सके।
इस गाइड का लक्ष्य #
एंडपॉइंट #
Redmine लॉगिन स्क्रीन HTTPS पर दिखती है और आप पहली बार एडमिनिस्ट्रेटर के रूप में लॉगिन कर पाते हैं।
इस बार का स्कोप #
OS का शुरुआती सेटअप, Redmine डिप्लॉयमेंट, DB इनिशियलाइज़ेशन, Apache + Passenger और self-signed SSL।
अगले कदम #
AD / LDAPS, external SMTP, Zabbix agent डिप्लॉयमेंट और मॉनिटरिंग इंटीग्रेशन अलग से किए जाएँगे।
आर्किटेक्चर ओवरव्यू #
| OS | Ubuntu Server 24.04 LTS |
|---|---|
| Web/AP | Apache + Passenger |
| DB | PostgreSQL |
| Redmine | 6.1.1 |
| Ruby | Ubuntu 24.04 में शामिल Ruby 3.2 सीरीज़ |
| पब्लिकेशन का तरीका | 80 → 443 रीडायरेक्ट, 443 self-signed सर्टिफिकेट के साथ listen करता है |
| डिप्लॉयमेंट लोकेशन | /opt/redmine/releases/redmine-6.1.1 |
वेरिफिकेशन की आसानी के लिए यह लेख self-signed सर्टिफिकेट इस्तेमाल करता है।
प्रोडक्शन एनवायरनमेंट के लिए हम कमर्शियल या internal CA सर्टिफिकेट से बदलने की सिफारिश करते हैं।
Step 1. OS अपडेट और आवश्यक पैकेजों का इंस्टॉलेशन #
सबसे पहले, OS को लेटेस्ट वर्शन में अपडेट करें और Redmine बिल्ड तथा PostgreSQL कनेक्शन के लिए जरूरी पैकेज एक साथ इंस्टॉल करें।libyaml-dev को शामिल करना न भूलें।
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y \
build-essential \
ruby-full ruby-dev bundler \
zlib1g-dev libpq-dev libyaml-dev pkg-config \
postgresql postgresql-contrib \
apache2 apache2-dev \
imagemagick ghostscript \
curl ca-certificates gnupg dirmngr apt-transport-https \
ldap-utils tar
Step 2. Passenger इंस्टॉलेशन #
ऑफिशियल Passenger रिपॉज़िटरी जोड़ें और उसे Apache मॉड्यूल के रूप में इंस्टॉल करें।
curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key-2025.txt \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null
echo "deb https://oss-binaries.phusionpassenger.com/apt/passenger noble main" \
| sudo tee /etc/apt/sources.list.d/passenger.list
sudo apt update
sudo apt install -y passenger libapache2-mod-passenger
sudo a2enmod passenger
sudo a2enconf servername
echo "ServerName rdm.bestnetllc.co.jp" | sudo tee /etc/apache2/conf-available/servername.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
निम्न से ऑपरेशन वेरिफाई करें:
sudo /usr/bin/passenger-config validate-install
sudo /usr/sbin/passenger-memory-stats
Step 3. Redmine यूज़र और डिप्लॉयमेंट डायरेक्टरी की तैयारी #
अपग्रेड आसान बनाने के लिए releases डायरेक्टरी वाले तरीके से डिप्लॉय करें।
sudo adduser --system --group --home /opt/redmine --shell /bin/bash redmine
sudo mkdir -p /opt/redmine/releases
sudo chown -R redmine:redmine /opt/redmine
Step 4. PostgreSQL सेटअप #
Redmine के लिए एक डेडिकेटेड role और database बनाएँ।
sudo -u postgres psql
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD '<DB_PASSWORD>' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
\q
Step 5. Redmine सोर्स कोड डिप्लॉयमेंट #
यह उदाहरण वर्शन 6.1.1 इस्तेमाल करता है। मेंटेनेंस रिलीज़ के हिसाब से जरूरत अनुसार बदलें।
cd /tmp
curl -L -o redmine-6.1.1.tar.gz https://www.redmine.org/releases/redmine-6.1.1.tar.gz
sudo -u redmine tar xzf redmine-6.1.1.tar.gz -C /opt/redmine/releases
sudo ln -sfn /opt/redmine/releases/redmine-6.1.1 /opt/redmine/current
Step 6. database.yml कॉन्फ़िगरेशन #
यह एक आम pitfall है। केवल PostgreSQL डेफिनिशन रखें और MySQL सैंपल हटा दें।
cd /opt/redmine/releases/redmine-6.1.1
sudo tee config/database.yml > /dev/null <<'EOF'
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "<DB_PASSWORD>"
encoding: utf8
schema_search_path: public
EOF
एन्क्रिप्शन keys के लिए configuration.yml भी तैयार करें।
sudo -u redmine cp config/configuration.yml.example config/configuration.yml
default:
database_cipher_key: "<LONG_RANDOM_STRING>"
production:
Step 7. bundle install और डेटाबेस इनिशियलाइज़ेशन #
gem इंस्टॉलेशन, secret जनरेशन, डेटाबेस माइग्रेशन और शुरुआती डेटा लोडिंग एक्सीक्यूट करें।
sudo chown -R redmine:redmine /opt/redmine
sudo -u redmine -H bash -lc '
cd /opt/redmine/releases/redmine-6.1.1
rm -rf vendor/bundle
bundle config set --local path vendor/bundle
bundle config set --local without "development test"
bundle install
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
'
अगर
yaml.h not found दिखे, तो libyaml-dev मौजूद नहीं है।अगर bundle टार्गेट्स में
mysql2 दिखे, तो संभवतः MySQL कॉन्फ़िगरेशनconfig/database.yml में बचा रह गया है।Step 8. Self-Signed सर्टिफिकेट बनाना #
यह उदाहरण CA:FALSE और SAN के साथ self-signed सर्टिफिकेट बनाता है।
पुराने तरीकों की तुलना में यह तरीका ब्राउज़र और Apache की ज्यादा वार्निंग से बचाता है।
sudo mkdir -p /etc/apache2/ssl
sudo tee /tmp/rdm-openssl.cnf > /dev/null <<'EOF'
[req]
default_bits = 4096
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn
[dn]
C = JP
ST = Tokyo
L = Tokyo
O = BestNetLLC
OU = IT
CN = rdm.bestnetllc.co.jp
[v3_req]
basicConstraints = critical,CA:FALSE
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = rdm.bestnetllc.co.jp
EOF
sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 3650 \
-keyout /etc/apache2/ssl/rdm.bestnetllc.co.jp.key \
-out /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt \
-config /tmp/rdm-openssl.cnf
sudo chmod 600 /etc/apache2/ssl/rdm.bestnetllc.co.jp.key
sudo chmod 644 /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt
Step 9. Apache VirtualHost कॉन्फ़िगरेशन #
पोर्ट 80, 443 पर रीडायरेक्ट करता है, और पोर्ट 443 Redmine की public डायरेक्टरी को DocumentRoot के रूप में सेट करता है।
वास्तविक path सीधे इस्तेमाल करने से symlink से होने वाले 403 एरर से बचाव होता है।
sudo a2enmod ssl rewrite headers
sudo tee /etc/apache2/sites-available/redmine.conf > /dev/null <<'EOF'
<VirtualHost *:80>
ServerName rdm.bestnetllc.co.jp
RewriteEngine On
RewriteRule ^/(.*)$ https://rdm.bestnetllc.co.jp/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName rdm.bestnetllc.co.jp
DocumentRoot /opt/redmine/releases/redmine-6.1.1/public
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt
SSLCertificateKeyFile /etc/apache2/ssl/rdm.bestnetllc.co.jp.key
PassengerRuby /