Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Added Talawa-admin to run system daemon service in Linux #3276

Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions INSTALLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ This document provides instructions on how to set up and start a running instanc
- [Installation using Docker](#installation-using-docker)
- [Prerequisites](#prerequisites-1)
- [Development Setup](#development-setup)
- [Talawa-Admin Service Setup Guide](#talawa-admin-service-setup-guide)
- [Prerequisites](#prerequisites-2)
- [Service Configuration](#service-configuration)
- [Steps to Enable and Manage the Service](#steps-to-enable-and-manage-the-service)
- [Troubleshooting](#troubleshooting)

<!-- tocstop -->

Expand Down Expand Up @@ -380,3 +385,108 @@ If you don't want this hook to run, you can manually opt out of this using the `

<br/>
```

# Talawa-Admin Service Setup Guide

This guide outlines the steps to set up and manage the Talawa-Admin service on a Linux server using `systemd`.

## Prerequisites

1. Firstly, You should have locally setup the Talawa-Admin repo using [Setting up this repository](#setting-up-this-repository)
2. Ensure **Node.js** and **npm** are correctly installed and available for the specified user and group.
3. It’s recommended to use **nvm** (Node Version Manager) for better management of different Node.js versions.
4. Ensure you have root or sudo access to configure systemd services.
5. Create a dedicated service user:
```bash
sudo useradd -r -s /bin/false talawa_admin
sudo groupadd -r talawa_admin
sudo usermod -a -G talawa_admin talawa_admin
# Get the absolute path to your talawa-admin installation
INSTALL_PATH=$(pwd)

sudo chown -R talawa_admin:talawa_admin $INSTALL_PATH
sudo chmod 750 $INSTALL_PATH
sudo find $INSTALL_PATH -type f -exec chmod 640 {} \;
sudo chmod 600 $INSTALL_PATH/.env
```

---

### Service Configuration
These steps below will help you setup the Linux Daemon Service for Talawa-Admin Project.
Please make sure to follow these step in sequence.

sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
1. **Copy the `talawa_admin.service` file**
- Place the `talawa_admin.service` file in the appropriate systemd directory based on your Linux distribution:
- For most distributions: `/etc/systemd/system/`
- For systems using `systemd`, this will be the default directory.

<!-- Optional Steps -->
- Verify service file permissions and ownership:
```bash
sudo chmod 644 /etc/systemd/system/talawa_admin.service
sudo chown root:root /etc/systemd/system/talawa_admin.service
sudo systemd-analyze verify talawa_admin.service
```

2. **Verify the CODEROOT Path**
- Ensure that the `CODEROOT` environment variable matches the absolute path to the Talawa-Admin code directory.

3. **Set the Correct Working Directory**
- Always use the absolute path for the `WorkingDirectory`. Do **not** use `$CODEROOT` in the `WorkingDirectory` field.

4. **Ensure the `.env` File Exists**
- Verify that the path in the `EnvironmentFile` line points to a valid `.env` file located in the root directory of the Talawa-Admin repository.

<!-- Optional Steps -->
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
- Validate environment file permissions and configuration:
```bash
sudo chmod 600 /path/to/talawa-admin/.env
sudo chown talawa_admin:talawa_admin /path/to/talawa-admin/.env
# Verify environment variables are loaded
sudo systemctl show-environment

```

5. **Adjust User and Group**
- Modify the `User` and `Group` settings to match the user account intended to run the service.

sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
---

### Steps to Enable and Manage the Service

1. **Reload the systemd daemon** to apply changes:
```bash
sudo systemctl daemon-reload
```

2. **Start the Talawa-Admin Service**:
```bash
sudo systemctl start talawa_admin.service
# Verify service started successfully
sudo systemctl status talawa_admin.service
```

3. **Stop the Talawa-Admin Service**:
```bash
sudo systemctl stop talawa_admin.service
```

4. **Enable the Service to Start on Boot**:
```bash
sudo systemctl enable talawa_admin.service
```

---

### Troubleshooting

- If you encounter any issues, you can check the status and logs of the service:
```bash
sudo systemctl status talawa_admin.service
sudo journalctl -u talawa_admin.service
```

---

By following these steps, you can set up and manage the Talawa-Admin service efficiently on your Linux server.
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
63 changes: 63 additions & 0 deletions examples/linux/systemd/talawa_admin.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
################################################################################
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved
#
# READ ALL STEPS BEFORE PROCEEDING
#
# 0) Ensure that Node.js and npm are correctly installed and available for the
# specified user and group.
# Use nvm for better interaction with different node versions.
# 1) Place this file in the appropriate systemd directory based on your Linux
# distribution, e.g., /etc/systemd/system/.
# 2) Verify the CODEROOT path matches the Talawa-Admin code directory.
# 3) Always add the absolute path of talawa-admin directory to WorkingDirectory don't use $CODEROOT.
# 4) Ensure the EnvironmentFile path points to a valid .env file for the service.
# 5) Adjust the User and Group to match the user account intended to run the service.
# 6) Run the command "sudo systemctl daemon-reload" after saving changes.
# 7) Use "sudo systemctl start talawa_admin.service" to start the service.
# 8) Use "sudo systemctl stop talawa_admin.service" to stop the service.
# 9) Use "sudo systemctl enable talawa_admin.service" to start the service on boot.
#
################################################################################

[Unit]
Description=Talawa-Admin Service
After=network.target

[Service]
User=talawa_admin
Group=talawa_admin
Environment=CODEROOT=path/to/your/talawa-admin
Environment=NODE_ENV=production
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved

# Absolute path is needed for working directory
WorkingDirectory=/path/to/your/talawa-admin

################################################################################
# No need to edit anything below here
################################################################################

EnvironmentFile=$CODEROOT/.env
ExecStart=/bin/bash -c '\
if [ -f "$HOME/.nvm/nvm.sh" ]; then \
. "$HOME/.nvm/nvm.sh" && \
if nvm use default; then \
exec npm run serve \
else \
echo "Failed to set Node.js version" >&2; \
exit 1; \
fi \
else \
echo "NVM not found" >&2; \
exit 1; \
fi'
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved

Restart=on-failure
RemainAfterExit=yes
ProtectSystem=full
NoNewPrivileges=true
PrivateTmp=true
Type=simple
RuntimeDirectory=talawa-admin
sahitya-chandra marked this conversation as resolved.
Show resolved Hide resolved


[Install]
WantedBy=multi-user.target
Loading