Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
7 changes: 7 additions & 0 deletions ci/vale/dictionary.txt
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ apxs
architected
architecting
aren
Argocd
argv
arpack
arping
Expand Down Expand Up @@ -245,6 +246,8 @@ bufio
bugtracker
buildah
buildbot
buildpack
Buildpacks
bukkit
bundler
bungeecord
Expand Down Expand Up @@ -374,6 +377,7 @@ completekey
composable
conda
config
configmap
configr
configs
configtest
Expand Down Expand Up @@ -1293,6 +1297,7 @@ Kuma
kustomize
kuznetosv
Kyber
Kyverno
lambdabunker
Laminas
Langa
Expand Down Expand Up @@ -1506,6 +1511,7 @@ Microweber
middlebox
middleboxes
middleware
milvus
Milvus
mimikatz
minecraft
Expand Down Expand Up @@ -2518,6 +2524,7 @@ teardown
techdocs
techland
Tectia
Tekton
telecom
telehealth
teleporting
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
510 changes: 510 additions & 0 deletions docs/guides/kubernetes/deploy-llm-for-ai-inferencing-on-apl/index.md

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
699 changes: 699 additions & 0 deletions docs/guides/kubernetes/deploy-rag-pipeline-and-chatbot-on-apl/index.md

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Large diffs are not rendered by default.

162 changes: 93 additions & 69 deletions docs/guides/quick-answers/linux/start-service-at-boot/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ description: The systemd daemon allows you to control Linux system services. Thi
authors: ["Linode"]
contributors: ["Linode"]
published: 2018-05-01
modified: 2025-03-27
keywords: ["systemd","service","enable service","Linux system service"]
license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)'
external_resources:
Expand All @@ -25,118 +26,141 @@ It is simple to create a custom systemd service that will run any script or proc

1. Create a script or executable that the service will manage. This guide uses a simple Bash script as an example:

{{< file "test_service.sh" bash >}}
DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo "Example service started at ${DATE}" | systemd-cat -p info
```file {title="test_service.sh" lang="bash"}
DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo "Example service started at ${DATE}" | systemd-cat -p info

while :
do
echo "Looping...";
sleep 30;
done
{{< /file >}}
while :
do
echo "Looping...";
sleep 30;
done
```

This script will log the time at which it is initialized, then loop infinitely to keep the service running.

2. Copy the script to `/usr/bin` and make it executable:

sudo cp test_service.sh /usr/bin/test_service.sh
sudo chmod +x /usr/bin/test_service.sh
```command
sudo cp test_service.sh /usr/bin/test_service.sh
sudo chmod +x /usr/bin/test_service.sh
```

3. Create a **Unit file** to define a systemd service:
3. Create a **Unit file** to define a systemd service in your application, where `/opt/myapp/` is the path to your application directory.

{{< file "/lib/systemd/system/myservice.service" conf >}}
[Unit]
Description=Example systemd service.
```file {title="/opt/myapp/myservice.service"}
[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /usr/bin/test_service.sh
[Service]
Type=simple
ExecStart=/bin/bash /usr/bin/test_service.sh

[Install]
WantedBy=multi-user.target
{{< /file >}}
[Install]
WantedBy=multi-user.target
```

This defines a simple service. The critical part is the `ExecStart` directive, which specifies the command that will be run to start the service.
* This defines a simple service that runs `/usr/bin/test_service.sh` through Bash.
* The `ExecStart` directive specifies the command to run.
* The `[Install]` section allows the service to be enabled at boot.

4. Copy the unit file to `/etc/systemd/system` and give it permissions:
4. Link the unit file from your application directory. This approach can streamline deployments by keeping the service definition with your codebase:

sudo cp myservice.service /etc/systemd/system/myservice.service
sudo chmod 644 /etc/systemd/system/myservice.service
```command
sudo systemctl enable /opt/myapp/myservice.service
```

If the `[Install]` section is present, this creates the necessary symlinks in `/etc/systemd/system/`.

Alternatively, copy the unit file to `/etc/systemd/system/`, and adjust the permissions:

```command
sudo cp myservice.service /etc/systemd/system/myservice.service
sudo chmod 644 /etc/systemd/system/myservice.service
```

For more information about the unit file and its available configuration options, see the [systemd documentation](https://www.freedesktop.org/wiki/Software/systemd/).

## Start and Enable the Service

1. Once you have a unit file, you are ready to test the service:

sudo systemctl start myservice

```command
sudo systemctl start myservice
```

2. Check the status of the service:

sudo systemctl status myservice
```command
sudo systemctl status myservice
```

If the service is running correctly, the output should resemble the following:

{{< output >}}
● myservice.service - Example systemd service.
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-05-01 18:17:14 UTC; 4s ago
Main PID: 16266 (bash)
Tasks: 2
Memory: 748.0K
CPU: 4ms
CGroup: /system.slice/myservice.service
├─16266 /bin/bash /usr/bin/test_service.sh
└─16270 sleep 30

May 01 18:17:14 localhost systemd[1]: Started Example systemd service..
May 01 18:17:14 localhost cat[16269]: Example service started at 2018-05-01 18:17:14
May 01 18:17:14 localhost bash[16266]: Looping...
{{< /output >}}
```output
● myservice.service - Example systemd service.
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-05-01 18:17:14 UTC; 4s ago
Main PID: 16266 (bash)
Tasks: 2
Memory: 748.0K
CPU: 4ms
CGroup: /system.slice/myservice.service
├─16266 /bin/bash /usr/bin/test_service.sh
└─16270 sleep 30

May 01 18:17:14 localhost systemd[1]: Started Example systemd service..
May 01 18:17:14 localhost cat[16269]: Example service started at 2018-05-01 18:17:14
May 01 18:17:14 localhost bash[16266]: Looping...
```

3. The service can be stopped or restarted using standard systemd commands:

sudo systemctl stop myservice
sudo systemctl restart myservice
```command
sudo systemctl stop myservice
sudo systemctl restart myservice
```

4. Finally, use the `enable` command to ensure that the service starts whenever the system boots:

sudo systemctl enable myservice
```command
sudo systemctl enable myservice
```

{{< output >}}
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /lib/systemd/system/myservice.service.
{{< /output >}}
```output
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /lib/systemd/system/myservice.service.
```

5. Reboot your Linode from the Linode Manager and check the status of the service:

sudo systemctl status myservice
```command
sudo systemctl status myservice
```

You should see that the service logged its start time immediately after booting:

{{< output >}}
● myservice.service - Example systemd service.
Loaded: loaded (/usr/lib/systemd/system/myservice.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-05-02 15:03:07 UTC; 48s ago
Main PID: 2973 (bash)
CGroup: /system.slice/myservice.service
├─2973 /bin/bash /usr/bin/test_service.sh
└─3371 sleep 30

May 02 15:03:07 localhost systemd[1]: Started Example systemd service..
May 02 15:03:07 localhost systemd[1]: Starting Example systemd service....
May 02 15:03:07 localhost bash[2973]: Looping...
May 02 15:03:37 localhost bash[2973]: Looping...
{{< /output >}}
```output
● myservice.service - Example systemd service.
Loaded: loaded (/usr/lib/systemd/system/myservice.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-05-02 15:03:07 UTC; 48s ago
Main PID: 2973 (bash)
CGroup: /system.slice/myservice.service
├─2973 /bin/bash /usr/bin/test_service.sh
└─3371 sleep 30

For more information about using `systemctl` commands, see the [systemctl guide](/docs/guides/introduction-to-systemctl).
May 02 15:03:07 localhost systemd[1]: Started Example systemd service..
May 02 15:03:07 localhost systemd[1]: Starting Example systemd service....
May 02 15:03:07 localhost bash[2973]: Looping...
May 02 15:03:37 localhost bash[2973]: Looping...
```

For more information about using `systemctl` commands, see the [systemctl guide](/docs/guides/introduction-to-systemctl).

## Troubleshooting

- "Example service started at ..." line does not appear in the output of the status command. The `systemd-cat` output is not reliable because of a race condition. As a workaround update the `test_service.sh` file as follows:
{{< file "test_service.sh" bash >}}
If the `Example service started at ...` line does not appear in the output of the status command, the `systemd-cat` output may not be reliable because of a race condition. As a workaround, you can update the `test_service.sh` file as follows:

```file {title="test_service.sh" lang="bash"}
info=/tmp/myservice-systemd-cat-pipe-info
mkfifo "$info"
trap "exec 3>&-; rm $info" EXIT
Expand All @@ -151,4 +175,4 @@ do
echo "Looping...";
sleep 30;
done
{{< /file >}}
```
56 changes: 40 additions & 16 deletions docs/marketplace-docs/guides/mean-stack/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: "Deploy a MEAN Stack through the Linode Marketplace"
description: "Learn how to easily deploy MEAN (MongoDB, Express, Angular, Node.js) using Linode's Marketplace Apps."
published: 2020-03-17
modified: 2022-03-08
modified: 2025-03-19
keywords: ['mongodb','mean','angular','express', 'web app', 'node']
tags: ["web server","database","cloud-manager","linode platform","web applications","marketplace"]
external_resources:
Expand All @@ -29,8 +29,6 @@ A MEAN (MongoDB, Express, Angular, Node.js) stack is a free and open-source web

- [Node.js](https://nodejs.org/en/about/) serves as the run-time environment for your application.

- [PM2](https://pm2.keymetrics.io) is a daemon process manager that helps you manage and keep your application online.

MEAN is a full-stack JavaScript-based framework consisting of MongoDB database, ExpressJS, AngularJS, and NodeJS. You can build entire web applications on JavaScript, from client to server to database with this stack. Single-language programming makes it easier to develop working applications more quickly without sacrificing functionality and features.

## Deploying a Marketplace App
Expand All @@ -45,51 +43,77 @@ MEAN is a full-stack JavaScript-based framework consisting of MongoDB database,

## Configuration Options

- **Supported distributions:** Ubuntu 20.04 LTS
- **Supported distributions:** Ubuntu 24.04 LTS
- **Recommended minimum plan:** 1GB Shared Compute Instance or higher, depending on the number of sites and size of the sites you plan on hosting.

### MEAN Options

- **Email address** *(required)*: Enter the email address to use for generating the SSL certificates.

{{% content "marketplace-limited-user-fields-shortguide" %}}
{{% content "marketplace-required-limited-user-fields-shortguide" %}}

{{% content "marketplace-custom-domain-fields-shortguide" %}}

{{% content "marketplace-special-character-limitations-shortguide" %}}

## Getting Started After Deployment

Once deployed, a "Hello World" sample application should be running on `http://localhost:3000`. An Nginx reverse proxy then serves the application through your custom domain or rDNS domain over ports 80 and 443. Follow the instructions below to view or access it.
Once the app is deployed, you need to obtain the credentials from the server.

To obtain credentials:

1. Log in to your new Compute Instance using one of the methods below:

- **Lish Console**: Log in to Cloud Manager, click the **Linodes** link in the left menu, and select the Compute Instance you just deployed. Click **Launch LISH Console**. Log in as the `root` user. To learn more, see [Using the Lish Console](/docs/products/compute/compute-instances/guides/lish/).
- **SSH**: Log in to your Compute Instance over SSH using the `root` user. To learn how, see [Connecting to a Remote Server Over SSH](/docs/guides/connect-to-server-over-ssh/).

1. Run the following command to access the credentials file:

```command
cat /home/$USERNAME/.credentials
```

This returns passwords that were automatically generated when the instance was deployed. Save them. Once saved, you can safely delete the file.

Once deployed, a *Hello World* sample application should be running. The Express backend runs on port `5000`, and Nginx serves the Angular frontend through your custom domain or rDNS domain over ports `80` and `443`. Follow the instructions below to view or access it.

### Accessing the MEAN App through the Command Line

The MEAN sample application is stored in the `/opt/mean/` directory. To access it within the command line, follow the instructions below.
The MEAN stack components are organized as follows:
- Frontend (Angular): `/var/www/[domain]`
- Backend (Express): `/var/www/[domain]/backend`

To access these components within the command line:

1. Log in to your Compute Instance via [SSH](/docs/guides/connect-to-server-over-ssh/) or [Lish](/docs/products/compute/compute-instances/guides/lish/).

1. Navigate to the directory in which the application is stored:
1. Go to the backend directory:

cd /opt/mean/
cd /var/www/[domain]/backend

1. Open the sample application with your preferred command line text editor, such as [nano](/docs/guides/use-nano-to-edit-files-in-linux/) or [vim](/docs/guides/what-is-vi/).
1. To view the Express server file, run:

nano server.js
cat server.js

1. To view the Angular frontend files, run:

cd /var/www/[domain]
ls

### Viewing the MEAN App through a Web Browser

Open your web browser and navigate to `https://[domain]`, where *[domain]* can be replaced with the custom domain you entered during deployment or your Compute Instance's rDNS domain (such as `192-0-2-1.ip.linodeusercontent.com`). See the [Managing IP Addresses](/docs/products/compute/compute-instances/guides/manage-ip-addresses/) guide for information on viewing rDNS.
Open your web browser and navigate to `https://[domain]`, where `[domain]` is the custom domain you entered during deployment or your Compute Instance's rDNS domain (such as `192-0-2-1.ip.linodeusercontent.com`). See the [Managing IP Addresses](/docs/products/compute/compute-instances/guides/manage-ip-addresses/) guide for information on viewing rDNS.

## Software Included

| **Software** | **Description** |
|:--------------|:------------|
| **MongoDB** | Document-based database |
| **MongoDB 8.0** | Document-based database |
| **Express** | Web application framework |
| **Angular** | JavaScript library |
| **Node JS** | Runtime environment |
| **PM2** | Daemon process manager |
| **Angular** | JavaScript frontend framework with CLI |
| **Node.js 22.x** | Runtime environment |
| **NGINX** | Web server |
| **UFW (UncomplicatedFirewall)** | Firewall utility. Ports 22, 80, and 443 for IPv4 and IPv6 are set to allow traffic. All other ports have the following firewall rules: deny (incoming), allow (outgoing). |


{{% content "marketplace-update-note-shortguide" %}}
Loading